2012-01-02 82 views

回答

13

如果我讀這個權利,那麼我認爲,所有你需要做的是:

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

然後重新裝上DomTreeCopy(代替原來的):

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

還是要另外它添加到DOM原文:

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

參考文獻:

+0

謝謝。因爲克隆不會支持CSS樣式/事件處理程序,所以共享upvote,而不是標記爲完美答案?我說得對嗎? – BreakPhreak 2012-01-02 17:00:15

+1

您是否閱讀過clone()'的參考資料?傳遞給方法的第一個「true,true」參數意味着它複製綁定到這些元素的數據和事件。第一個「true」適用於克隆的元素,第二個「true」適用於克隆元素的子元素。只要你的樣式表支持被克隆元素匹配的選擇器,那麼CSS就會自動應用/自動應用。 – 2012-01-02 17:04:13

+0

謝謝你指出我缺少的一些細節。 – BreakPhreak 2012-01-03 07:13:43

1

可以使用$.data() ...方法

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

這是你可以存儲所有你想在一個字典類型啥子 - 再後來重用。

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

+0

哦..這更有效,更正確! – 2012-01-02 14:56:20

0

您可以將克隆的對象存儲在DOM中的其他位置。修改可見的DOM。當你需要實際值時,你可以從你追加的地方追蹤它。

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

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

然後跟蹤與$("#oldInfo")

8

原來DOM使用簡單的JavaScript:

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

請注意,使用此方法,您的事件處理程序是 而不是已恢復。但是你也可以支持它們,因爲它們只是普通的功能。

原來,我錯了。事件處理程序被保留,因爲它是您要還原的原始DOM。如果您正在複製它並將它附加到別處,則不會複製事件處理程序。 This demo顯示事件處理程序保持不變。

+0

您能否詳細說明事件處理程序? – BreakPhreak 2012-01-02 15:30:46

+1

@BreakPhreak看起來我錯了。看到我的答案。 – 2012-01-02 16:01:12