เป็นไปได้ไหมที่จะโคลนวัตถุองค์ประกอบ html ใน JavaScript / JQuery


102

ฉันกำลังมองหาเคล็ดลับในการแก้ปัญหาของฉัน

ฉันมีองค์ประกอบ html (เช่นช่องใส่กล่องเลือก) ในตาราง ตอนนี้ฉันต้องการคัดลอกวัตถุและสร้างวัตถุใหม่จากการคัดลอกและด้วย JavaScript หรือ jQuery ฉันคิดว่ามันน่าจะได้ผล แต่ตอนนี้ฉันยังไม่รู้เรื่องเล็กน้อย

สิ่งนี้ (รหัสหลอก):

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

newDdl = oldDdl;

oldDdl.attr('id', newId);

oldDdl.html();

3
stackoverflow.com/search?q=jquery+copy+element+contentมีคำถามที่เกี่ยวข้องมากมาย
Felix Kling

คำตอบ:


61

การใช้โค้ดของคุณคุณสามารถทำสิ่งนี้ใน JavaScript ธรรมดาโดยใช้วิธี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 );

หรือใช้วิธี jQuery clone () (ไม่ได้ผลดีที่สุด):

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

30
การแก้ไข ID นั้นสำคัญมากเมื่อคุณโคลนองค์ประกอบ
Dragos Durlut

287

ด้วย JavaScript ดั้งเดิม:

newelement = element.cloneNode(bool)

โดยที่บูลีนระบุว่าจะโคลนโหนดลูกหรือไม่

นี่คือเอกสารที่สมบูรณ์ใน MDN


52
คำตอบที่ดีที่สุด อย่าใช้ jquery ในที่ที่คุณไม่ต้องการ
luschn

ดูดี ... แต่ความเข้ากันได้ของเบราว์เซอร์เป็นสิ่งที่น่าสงสัย ณ วันนี้
Aniket Suryavanshi

14
@AniketSuryavanshi ฉันไม่แน่ใจเกี่ยวกับวันที่ 4 กุมภาพันธ์โดยเฉพาะ แต่ความเข้ากันได้ดูสมบูรณ์แบบในวันนี้

2
รหัสและชื่อจะซ้ำกัน รหัสต้องมีการเปลี่ยนแปลงชื่ออาจถูกปล่อยทิ้งไว้เหมือนเดิมหากคาดว่าชื่อซ้ำกัน
przemo_li

น่าเสียดายที่คุณสูญเสียคุณสมบัติทั้งหมด: /
Pieter De Bie

16

ได้คุณสามารถคัดลอกลูกขององค์ประกอบหนึ่งและวางลงในองค์ประกอบอื่นได้:

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

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

หลักฐาน: http://jsfiddle.net/de9kc/


รหัสที่ซ้ำกันจะเป็นปัญหากับแนวทางของคุณ
przemo_li




0

ในหนึ่งบรรทัด:

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

1
ฉันไม่คิดว่าจะช่วยได้เพราะค่าแอตทริบิวต์ของคุณเป็นสตริงที่จะไม่เปลี่ยนแปลง
Jamie R Rytlewski

0

คุณต้องเลือก "# foo2" เป็นตัวเลือกของคุณ จากนั้นรับด้วย html ()

นี่คือ html:

<div id="foo1">

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

นี่คือจาวาสคริปต์:

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

นี่คือ jsfiddle: http://jsfiddle.net/fritzdenim/DhCjf/

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.