jQuery - comment faire pour ajouter plusieurs nœuds pour conteneur
J'ai besoin d'ajouter de multiples nœuds d'un conteneur. Plutôt que de faire un lent DOM ajouter à l'intérieur de chaque itération, je veux de la queue, les nœuds dans un fragment de document (ouvert à d'autres idées) et ajouter tout à la fois. Voici mon code:
var fragment = document.createDocumentFragment();
$.each( poFailureInfoMultiple, function(i,e){
fragment.appendChild(
$('<button/>', {
'class': 'el-contents-center multiple-record'
})
);
});
$('#some-container').html( fragment );
Mon problème est que je reçois un message d'erreur indiquant:
Could not convert JavaScript argument arg 0 [nsIDOMDocumentFragment.appendChild]
Alors, comment puis-je ajouter de multiples nœuds d'élément à mon DOM à la fois? Je n'AI pas à utiliser le fragment de méthode (je viens de le trouver, et il me semblait viable).
Note:
JE NE VEUX PAS UTILISER LA SYNTAXE HTML POUR AJOUTER
i.e. $('#some-container').append('<button class="myclass"></button>');
- D'où vient
poFailureInfoMultiple
viennent? - Pourquoi êtes-vous de mélanger les fragments de document avec
jQuery
.appendChild
ne pas prendre unjQuery
objet et$.html
ne pas prendre unDocumentFragment
c'est ce Que votre erreur vous dit.
Vous devez vous connecter pour publier un commentaire.
L'ajout de méthode sur un objet jQuery ne modifie pas l'objet lui-même, mais renvoie un nouvel objet, qui est pourquoi vous avez besoin de
elemsToAppend = elemsToAppend.add(...)
. Honnêtement, je ne peux pas dire à quelle vitesse cette méthode est bien. En fait je pense que le html méthode est plus rapide mais.Vous sont un mélange de fragments de document avec jQuery, passer les mauvais arguments.
appendChild
ne pas prendre unjQuery
objet et$.html
ne pas prendre unDocumentFragment
c'est ce Que votre erreur vous dit.Exemple http://jsfiddle.net/YNLzg/
$('#some-container').append(fragment.childNodes);
va faire le travail. Pour un plaisir d'exemple, exécutez ceci dans la console:La rubrique apparaîtra au bas de la page. (Testé sur Chrome, FF7, et IE8)
Mise à JOUR:
Afin de clarifier la façon dont cela s'applique à la de code dans votre OP:
DocumentFragment
ne dispose pas d'uninnerHTML
propriété à utiliser. Mise à jour de répondre à testé avec, code fonctionnel.$('#some-container').append(fragment.childNodes);
est l'objet nœud de notation et de travail.Si vous choisissez la syntaxe html pour append (démo):