Est-il possible de cloner des objets élément html dans JavaScript / JQuery?


101

Je cherche des conseils pour résoudre mon problème.

J'ai un élément html (comme le champ de saisie de la boîte 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 fonctionner d'une manière ou d'une autre, mais je suis un peu désemparé pour le moment.

Quelque chose comme ça (pseudo code):

oldDdl = $("#ddl_1").get(); 

newDdl = oldDdl;

oldDdl.attr('id', newId);

oldDdl.html();

Réponses:


60

En utilisant votre code, vous pouvez faire quelque chose comme ça en JavaScript brut en utilisant la méthode cloneNode () :

// Create a clone of element with id ddl_1:
let clone = document.querySelector('#ddl_1').cloneNode( true );

// Change the id attribute of the newly created element:
clone.setAttribute( 'id', newId );

// Append the newly created element on element p 
document.querySelector('p').appendChild( clone );

Ou en utilisant la méthode jQuery clone () (pas la plus efficace):

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

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

286

Avec JavaScript natif:

newelement = element.cloneNode(bool)

où le booléen indique s'il faut cloner les nœuds enfants ou non.

Voici la documentation complète sur MDN .


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

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

14
@AniketSuryavanshi Je ne suis pas sûr du 4 février en particulier, mais la compatibilité semble parfaite aujourd'hui

2
Les identifiants et les noms seront dupliqués. Les identifiants DOIVENT être modifiés, les noms POURRAIENT rester tels quels si des noms en double sont attendus.
przemo_li

Dommage que vous perdiez tous les attributs: /
Pieter De Bie

16

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/


Les identifiants en double seront un problème avec votre approche
przemo_li

4

C'est en fait très simple dans jQuery:

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

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


2

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

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

FIDDLE ICI



0

En une seule ligne:

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

1
Je ne pense pas que cela aidera car la valeur de votre attribut est une chaîne qui ne changera pas.
Jamie R Rytlewski

0

Vous devez sélectionner "# foo2" comme sélecteur. Ensuite, récupérez-le avec html ().

Voici le 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/

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.