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();

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

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 .


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/


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 ...




0

Dalam satu baris:

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

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/

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.