web-dev-qa-db-fra.com

Comment créer un objet jQuery vide, non nul, prêt à être ajouté?

Je souhaite ajouter du code HTML à un objet jQuery non null vide uniquement dans la boucle, mais il ne fonctionne pas sauf si je crée un objet et ajoute une balise HTML lors de la création. Comment créer un objet jQuery vide et pouvoir y ajouter du HTML ultérieurement?

//var $new = $().add("");  //can't use this object in the loop
//var $new = $([]);        //can't use this object in the loop
//var $new = $();        //can't use this object in the loop
//var $new = $("#nonexistingelement"); //can't use this object in the loop
var $new = $().add("<tr>");  //works but I don't want to add any html at this point. 

$.each(.....)
  {
    $new.append("<sometag>");

});

alert($new.html());  //should display some html

Addition:http://jsfiddle.net/vfPNT /

43
Tony_Henrich

Je ne pouvais pas trouver un autre moyen alors j'ai commencé avec le <tr>. Supprimer le <tr> tout en conservant le contenu ne fonctionnait pas correctement et c'est pourquoi j'ai posté la question. J'ai donc créé une nouvelle sélection jQuery en sélectionnant tous les <sometag>'s which were inside the <tr> et jeté $ new.

var $new = $().add("<tr>");  

$.each(.....)
  {
    $new.append("<sometag>");

});
$new.append("</tr>");
$newObject = $('sometagt', $new)
..... do more work using $newObject
0
Tony_Henrich

Les fragments de document sont parfaits pour cela; crée un objet vide prêt à être ajouté. :)

$(document.createDocumentFragment())
9
Justin Geeslin

Votre objet $new est un sélecteur vide, donc append n'a aucun ensemble à ajouter.

add est requis pour ajouter un nœud DOM, puis vous ajoutez à ces nœuds DOM. Ne pensez pas que vous pouvez éviter de commencer avec un .add.

j'ai testé la solution ci-dessus mais cela n'a pas fonctionné pour moi, il est toujours resté comme objet jQuery vide ...

si quelqu'un est intéressé, voici ma solution:

var jQueryElements = [],
    $new;

$.each( [1, 2, 3, 4], function(i, v){
  jQueryElements = jQueryElements.Push($('<div>').get(0));
});

$new = $(jQueryElements);
1
Tom

si vous ne voulez pas vous retrouver avec une étiquette laide:

if(!$new){
$new.append("</sometag>");
} else {
var $new = $("</sometag>");
0
Felix Lepoutre