2016-09-02 106 views
0

最近在this question我問如何找出風格是否出現在課堂上。我被告知(通過skobaljic)我需要克隆元素。在元素(jQuery方法)的.clone()調用期間,結果對象包含默認樣式(例如來自樣式表),所以插入的樣式不包含在克隆中。這是我的理解。但是,當我需要檢測是否存在6種風格時,克隆完整元素(包括所有可能是數位目錄或數千個childern元素)似乎很奇怪。我爲克隆方法引用了jQuery的代碼。有這樣的:如何創建元素的淺拷貝?

destElements = getAll(clone); 
srcElements = getAll(elem); 

所以函數getAll被調用兩次。

後來我查了一下包含GETALL:

var ret = typeof context.getElementsByTagName !== "undefined" ? 
    context.getElementsByTagName(tag || "*") : 
    typeof context.querySelectorAll !== "undefined" ? 
    context.querySelectorAll(tag || "*") : 
    []; 

從Mozilla的手冊:

的Element.getElementsByTagName()方法返回現場 的HTMLCollection給定標記名稱的元素。搜索指定元素下的子樹 ,排除元素 本身。

Document.querySelectorAll() - 返回內 的元素列表相匹配選擇器的指定組,該文件(使用文檔的 節點的深度優先前序遍歷)。返回的對象 是一個NodeList。

所以很明顯創建元素的深層副本是毫無意義的,它需要性能。當我需要進行深入的搜索/比較時,這個問題會變得更加嚴重,這會導致過度浪費資源。我想克隆沒有它的子元素的元素。這可能嗎?克隆應該包含默認樣式,就像您使用.clone()所做的一樣。怎麼做?

回答

1

我相信這可以幫助你:

來源:http://www.w3schools.com/jsref/met_node_clonenode.asp

// Copy the element and its child nodes 
    var clone_with_child = yourElement.cloneNode(true); 
    // Copy only the element 
    var clone_without_child = yourElement.cloneNode(false); 
+1

謝謝。並且請避免w3schools他們是非常可憐的參考。 Mozilla永遠https://developer.mozilla.org/en/docs/Web/API/Node/cloneNode。 – user1141649