È possibile clonare oggetti elemento html in JavaScript / JQuery?


100

Sto cercando alcuni suggerimenti su come risolvere il mio problema.

Ho un elemento html (come il campo di input della casella di selezione) in una tabella. Ora voglio copiare l'oggetto e generarne uno nuovo dalla copia, e questo con JavaScript o jQuery. Penso che in qualche modo dovrebbe funzionare, ma al momento sono un po 'incapace.

Qualcosa di simile (pseudo codice):

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

newDdl = oldDdl;

oldDdl.attr('id', newId);

oldDdl.html();

Risposte:


60

Usando il tuo codice puoi fare qualcosa di simile in JavaScript semplice usando il metodo 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 );

O usando il metodo jQuery clone () (non il più efficiente):

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

30
È MOLTO importante modificare l'ID quando si clona un elemento.
Dragos Durlut

285

Con JavaScript nativo:

newelement = element.cloneNode(bool)

dove il valore booleano indica se clonare o meno i nodi figlio.

Ecco la documentazione completa su MDN .


50
migliore risposta. non utilizzare jquery dove non ne hai bisogno.
luschn

Sembra buono ... ma la compatibilità del browser è discutibile a partire da oggi.
Aniket Suryavanshi

13
@AniketSuryavanshi Non sono sicuro del 4 febbraio in particolare, ma oggi la compatibilità sembra perfetta

2
ID e nomi verranno duplicati. Gli ID DEVONO essere cambiati, i nomi POTREBBERO essere lasciati come sono se sono previsti nomi duplicati.
przemo_li

Peccato che perdi tutti gli attributi: /
Pieter De Bie

16

Sì, puoi copiare i figli di un elemento e incollarli nell'altro elemento:

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

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

Prova: http://jsfiddle.net/de9kc/


Gli ID duplicati saranno un problema con il tuo approccio
przemo_li

4

In realtà è molto semplice in jQuery:

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

Cambia .appendTo () ovviamente ...


2

Puoi usare il metodo clone () per creare una copia ..

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

FIDDLE QUI


1

Prova questo:

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

0

In una riga:

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

1
Non penso che sarà d'aiuto poiché il valore del tuo attributo è una stringa che non cambierà.
Jamie R Rytlewski

0

Devi selezionare "# foo2" come selettore. Quindi, ottenerlo con html ().

Ecco l'html:

<div id="foo1">

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

Ecco il javascript:

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

Ecco il jsfiddle: http://jsfiddle.net/fritzdenim/DhCjf/

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.