2012-01-02 22 views

Trả lời

13

Nếu tôi đang đọc quyền này, sau đó tôi nghĩ rằng tất cả bạn cần làm là:

var DomTreeCopy = $('parentElementSelector').clone(true,true); 

Và sau đó tái gắn DomTreeCopy (ở vị trí của gốc):

$('parentElementSelector').replaceWith(DomTreeCopy); 

Hoặc để thêm nó vào DOM ngoài với bản gốc:

$(DomTreeCopy).insertAfter($('parentElementSelector')); 

Tài liệu tham khảo:

+0

Cảm ơn. Chia sẻ một upvote, không đánh dấu như một câu trả lời hoàn hảo, kể từ khi nhân bản sẽ không hỗ trợ CSS phong cách/xử lý sự kiện? Tôi có đúng không? – BreakPhreak

+1

Bạn đã đọc tài liệu tham khảo cho 'clone()' chưa? Các đối số 'true, true' đầu tiên được truyền cho phương thức có nghĩa là nó sao chép dữ liệu và các sự kiện liên kết với các phần tử.'True' đầu tiên áp dụng cho phần tử được nhân bản, và' true' thứ hai cho con của phần tử nhân bản. Miễn là bảng định kiểu của bạn hỗ trợ các bộ chọn phù hợp với các phần tử được nhân bản thì có, CSS sẽ tự áp dụng/được áp dụng tự động. –

+0

Cảm ơn bạn đã chỉ cho tôi một số chi tiết còn thiếu. – BreakPhreak

1

bạn có thể sử dụng $.data() ... phương pháp

$.data(document.body, "sortElement", "0"); //set value 
    $.data(document.body, "sortElement");  //read value 

đây là bạn có thể lưu trữ tất cả WAHT bạn muốn trong một loại từ điển - và sau đó tái sử dụng nó sau này.

http://api.jquery.com/jQuery.data/

+0

Ohh .. Điều này hợp lệ và chính xác hơn! –

0

Bạn có thể lưu trữ đối tượng được sao chép ở một nơi khác trong DOM. Sửa đổi DOM hiển thị. Khi bạn yêu cầu giá trị thực tế, bạn có thể theo dõi nó từ nơi bạn đã nối.

<div id="oldInfo"></div> 

$("#youActualDom").clone().appendTo("#oldInfo").hide(); 

Sau đó theo dõi dom ban đầu với $("#oldInfo")

8

Sử dụng JavaScript đơn giản:

var elem = document.getElementById('theElement'), 
    backupElem = elem.cloneNode(true); 
// Your tinkering with the original 
elem.parentNode.replaceChild(backupElem, elem); 

Working demo

MDN - cloneNode

MDN - replaceChild

Lưu ý rằng việc sử dụng phương pháp này, trình xử lý sự kiện của bạn là không được khôi phục. Nhưng bạn cũng có thể sao lưu chúng, vì chúng chỉ là những chức năng bình thường.

Hóa ra, tôi đã sai về điều đó. Trình xử lý sự kiện được giữ nguyên vì đó là DOM gốc mà bạn đang khôi phục. Nếu bạn đang sao chép và thêm nó ở nơi khác, trình xử lý sự kiện sẽ không được sao chép. This demo cho thấy trình xử lý sự kiện vẫn còn.

+0

Bạn có thể giải thích thêm về các trình xử lý sự kiện không? – BreakPhreak

+1

@BreakPhreak Có vẻ như tôi đã sai về điều đó. Xem câu trả lời của tôi. –

Các vấn đề liên quan