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 /
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
Les fragments de document sont parfaits pour cela; crée un objet vide prêt à être ajouté. :)
$(document.createDocumentFragment())
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);
si vous ne voulez pas vous retrouver avec une étiquette laide:
if(!$new){
$new.append("</sometag>");
} else {
var $new = $("</sometag>");