Ajout d'un élément DOM deux fois (jQuery)
Quelqu'un peut m'expliquer pourquoi le code suivant ne pas ajouter <foo>
à la fois #a
et #b
?
HTML:
<div id="a"></div>
<div id="b"></div>
JS:
$(function(){
var $foo = $("<foo>HI</foo>");
$("#a").append($foo);
$("#b").append($foo);
});
Edit: merci pour les conseils, le fait que .append()
déplace l'élément explique ce comportement. Puisque l'élément dans mon application est en fait l'épine Dorsale de la Vue .el
je préfère ne pas le clone.
source d'informationauteur parsa | 2013-07-16
Vous devez vous connecter pour publier un commentaire.
Parce que l'utilisation de
append
en train de se déplacer l'élément. De sorte que votre code a été de passer$foo
dans le document à#a
puis en le déplaçant d'#a
à#b
. On pourrait cloner place comme ceci pour l'effet désiré - de cette façon, il est l'ajout d'un clone plutôt que l'élément initial:Vous pourriez également ajouter le
html
de$foo
qui serait juste prendre le dom à l'intérieur plutôt que de l'élément lui-même:Les exemples ci-dessus sont en supposant que vous avez une plus compliqué scénario où
$foo
n'est pas seulement un objet jQuery créé à partir d'une chaîne... plus probable, il est créé à partir d'un élément dans votre DOM.Si elle est en fait tout simplement créé de cette façon, et pour cela... il n'y a aucune raison de créer cet objet jQuery pour commencer, vous pouvez simplement ajouter la chaîne elle-même (
"<foo>HI</foo>"
) directement, comme:Essayer
clone
. Ce qui, comme son nom l'indique, permet de copier le$foo
élément et de ne pas bouger, commeappend
fera.Mais, pourquoi ne pas l'utiliser?
Cela fonctionnera également 🙂
Voici une démo pour ces deux situations : http://jsfiddle.net/hungerpain/sCvs7/3/
Vous devez
create a new instance
chaque fois que vous souhaitez ajouter à la DOM.Sinon, il se réfère à la même instance qui a déjà été ajouté.
Supprimer la
$
symbole précédant la nouvelle div être ajouté en tant que évalue à un objet jQuery et a les limites indiquées ci-dessus. ouclone
l'élément.Vérifier le Violon
Vous pouvez utiliser le .méthode clone() pour créer une nouvelle instance à ajouter au DOM, depuis votre code actuel, renvoie à la même instance à deux reprises.