2009-05-28 5 views
73

Je suis à la recherche de quelques astuces pour résoudre mon problème.Est-il possible de cloner des objets élément html dans JavaScript/JQuery?

J'ai un élément html (comme un champ de sélection de zone de sélection) dans une table. Maintenant, je veux copier l'objet et en générer un nouveau à partir de la copie, et cela avec JavaScript ou jQuery. Je pense que cela devrait marcher, mais je suis un peu désemparé pour le moment.

Quelque chose comme ça (pseudo code):

+3

http://stackoverflow.com/search?q=jquery+copy+element+content a un tas de questions connexes. –

Répondre

34

La façon jQuery (pas le plus efficace):

Regardez la méthode clone() de JQuery

En utilisant votre code que vous pouvez faire quelque chose comme ça:

$('#ddl_1').clone().attr('id', newId).appendTo('p'); // append to where you want 
+22

Il est TRÈS important de modifier l'ID lorsque vous clonez un élément. –

3

C'est en fait très facile dans jQu rès:

$("#ddl_1").clone().attr("id",newId).appendTo("body"); 

Changement .appendTo() bien sûr ...

+0

+1 vous me battez! –

0

en une ligne:

$('#selector').clone().attr('id','newid').appendTo('#newPlace'); 
+1

Je ne pense pas que cela vous aidera car votre valeur d'attribut est une chaîne qui ne changera pas. –

238

Avec javascript natif:

newelement = element.cloneNode(bool) 

où le booléen indique si pour cloner des noeuds enfants ou non

+33

meilleure réponse. N'utilisez pas jquery là où vous n'en avez pas besoin. – luschn

+0

Ça a l'air bien ... mais la compatibilité du navigateur est discutable à partir d'aujourd'hui. –

+11

@AniketSuryavanshi Je ne suis pas sûr du 4 février en particulier, mais [la compatibilité semble parfaite aujourd'hui] (http://quirksmode.org/dom/core/#t91) –

15

Oui, vous pouvez copier les enfants d'un élément et les coller dans l'autre élément:

var foo1 = jQuery('#foo1'); 
var foo2 = jQuery('#foo2'); 

foo1.html(foo2.children().clone()); 

Preuve: http://jsfiddle.net/de9kc/

+0

Des ID en double seront un problème avec votre approche –

1

Essayez ceci:

$('#foo1').html($('#foo2').children().clone()); 
0

Vous devez sélectionner "# foo2" comme votre sélecteur. Ensuite, obtenez-le avec html().

Voici le code html:

<div id="foo1"> 

</div> 
<div id="foo2"> 
    <div>Foo Here</div> 
</div>​ 

Voici le javascript:

$("#foo2").click(function() { 
    //alert("clicked"); 
    var value=$(this).html(); 
    $("#foo1").html(value); 
});​ 

Voici le jsFiddle: http://jsfiddle.net/fritzdenim/DhCjf/

2

Vous pouvez utiliser clone() méthode pour créer un copie ..

$('#foo1').html($('#foo2 > div').clone())​; 

FIDDLE HERE

Questions connexes