Có thể sao chép các đối tượng phần tử html trong JavaScript / JQuery không?


100

Tôi đang tìm kiếm một số mẹo về cách giải quyết vấn đề của mình.

Tôi có một phần tử html (như trường nhập hộp chọn) trong một bảng. Bây giờ tôi muốn sao chép đối tượng và tạo một đối tượng mới từ bản sao và đối tượng đó bằng JavaScript hoặc jQuery. Tôi nghĩ điều này sẽ hiệu quả bằng cách nào đó nhưng tôi hơi bối rối vào lúc này.

Một cái gì đó như thế này (mã giả):

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

newDdl = oldDdl;

oldDdl.attr('id', newId);

oldDdl.html();

3
stackoverflow.com/search?q=jquery+copy+element+content có một loạt câu hỏi liên quan.
Felix Kling

Câu trả lời:


60

Sử dụng mã của bạn, bạn có thể làm điều gì đó như thế này trong JavaScript đơn giản bằng cách sử dụng phương thức 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 );

Hoặc sử dụng phương thức jQuery clone () (không phải là hiệu quả nhất):

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

30
Điều RẤT quan trọng là phải sửa đổi ID khi bạn sao chép một phần tử.
Dragos Durlut 9/10/12

284

Với JavaScript gốc:

newelement = element.cloneNode(bool)

trong đó Boolean cho biết có sao chép các nút con hay không.

Đây là tài liệu đầy đủ về MDN .


50
câu trả lời tốt nhất. không sử dụng jquery khi bạn không cần nó.
luschn

Có vẻ tốt ... nhưng tính tương thích của trình duyệt vẫn còn vấn đề cho đến ngày nay.
Aniket Suryavanshi

13
@AniketSuryavanshi Tôi không chắc chắn về ngày 04 tháng 2 nói riêng, nhưng khả năng tương thích hoàn hảo trông ngày nay

2
ID và tên sẽ được trùng lặp. ID CẦN được thay đổi, các tên CÓ THỂ được giữ nguyên nếu có tên trùng lặp.
przemo_li

Quá xấu bạn mất tất cả các thuộc tính: /
Pieter De Bie

16

Có, bạn có thể sao chép phần tử con của một phần tử và dán chúng vào phần tử khác:

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

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

Bằng chứng: http://jsfiddle.net/de9kc/


ID trùng lặp sẽ là một vấn đề với cách tiếp cận của bạn
przemo_li

4

Nó thực sự rất dễ dàng trong jQuery:

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

Tất nhiên là thay đổi .appendTo () ...




0

Trong một dòng:

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

1
Tôi không nghĩ rằng điều đó sẽ hữu ích vì giá trị thuộc tính của bạn là một chuỗi sẽ không thay đổi.
Jamie R Rytlewski

0

Bạn cần chọn "# foo2" làm bộ chọn của mình. Sau đó, lấy nó bằng html ().

Đây là html:

<div id="foo1">

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

Đây là javascript:

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

Đây là jsfiddle: http://jsfiddle.net/fritzdenim/DhCjf/

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.