Apakah mungkin untuk mengkloning objek elemen html di JavaScript / JQuery?

100

Saya mencari beberapa tip tentang bagaimana menyelesaikan masalah saya.

Saya memiliki elemen html (seperti kolom input kotak pilih) dalam tabel. Sekarang saya ingin menyalin objek dan menghasilkan yang baru dari salinan, dan itu dengan JavaScript atau jQuery. Saya pikir ini harus berhasil, tetapi saya sedikit tidak mengerti saat ini.

Sesuatu seperti ini (kode semu):

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

newDdl = oldDdl;

oldDdl.attr('id', newId);

oldDdl.html();
Richard
sumber
3
stackoverflow.com/search?q=jquery+copy+element+content memiliki banyak pertanyaan terkait.
Felix Kling

Jawaban:

60

Menggunakan kode Anda, Anda dapat melakukan sesuatu seperti ini dalam JavaScript biasa menggunakan metode 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 );

Atau menggunakan metode jQuery clone () (bukan yang paling efisien):

$('#ddl_1').clone().attr('id', newId).appendTo('p'); // append to where you want
Boris Guéry
sumber
30
SANGAT penting untuk mengubah ID saat Anda mengkloning elemen.
Dragos Durlut
285

Dengan JavaScript asli:

newelement = element.cloneNode(bool)

di mana Boolean menunjukkan apakah akan menggandakan node turunan atau tidak.

Berikut dokumentasi lengkap tentang MDN .

annakata
sumber
50
jawaban Terbaik. jangan gunakan jquery dimana anda tidak membutuhkannya.
luschn
Kelihatannya bagus ... tapi kompatibilitas browser masih dipertanyakan sampai hari ini.
Aniket Suryavanshi
13
@AniketSuryavanshi Saya tidak yakin tentang 4 Februari khususnya, tetapi kompatibilitas terlihat sempurna hari ini
2
ID dan nama akan digandakan. ID PERLU diubah, nama BISA dibiarkan apa adanya jika nama duplikat diharapkan.
przemo_li
Sayang sekali Anda kehilangan semua atribut: /
Pieter De Bie
16

Ya, Anda dapat menyalin turunan dari satu elemen dan menempelkannya ke elemen lain:

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

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

Bukti: http://jsfiddle.net/de9kc/

Tadeck
sumber
ID duplikat akan menjadi masalah dengan pendekatan Anda
przemo_li
4

Ini sebenarnya sangat mudah di jQuery:

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

Ubah .appendTo () tentu saja ...

Philippe Leybaert
sumber
2

Anda dapat menggunakan metode clone () untuk membuat salinan ..

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

FIDDLE DI SINI

Sushanth -
sumber
1

Coba ini:

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

Dalam satu baris:

$('#selector').clone().attr('id','newid').appendTo('#newPlace');
Tamas Czinege
sumber
1
Saya tidak berpikir itu akan membantu karena nilai atribut Anda adalah string yang tidak akan berubah.
Jamie R Rytlewski
0

Anda harus memilih "# foo2" sebagai pemilih Anda. Lalu, dapatkan dengan html ().

Ini html-nya:

<div id="foo1">

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

Ini javascriptnya:

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

Ini jsfiddle: http://jsfiddle.net/fritzdenim/DhCjf/

Franz Noel
sumber