2012-03-09 83 views
1

這裏是jsfiddeljquery的大師,jquery的延伸不克隆DOM元素

class Overlay 
    constructor: -> 
     @header = $("<div> header</div>") 
     @footer = $("<div> footer</div>")  
    get: -> 
     @popup = $("<div></div>").append(@header).append(@footer) 
     @popup.clone(true) 

overlay = new Overlay 
overlay_extend = {}  
$.extend(true,overlay_extend,overlay) 
overlay_extend.header.append("<div>more header</div>") 
overlay.header.appendTo("body") 

在的jsfiddle我改變擴展DOM元素和原單DOM是changed..Any新的想法。

+1

jQuery只克隆普通對象或數組,但不包含DOM元素(也可能不包含jQuery對象)。 [這是源代碼](https://github.com/jquery/jquery/blob/1.7.1/src/core.js#L303)。 – 2012-03-09 19:34:56

+0

我很確定$ .extend並不意味着可以在類的實例上工作,儘管我在DOCS中找不到任何提及。文檔只是提到基本類型不被擴展。此外,使用包含對dom元素的引用的普通對象進行擴展將導致新對象包含對相同dom元素的引用,而不是對那些dom元素的克隆。這是設計。 – 2012-03-09 19:40:39

+0

@KevinB - 你是什麼意思的設計..爲什麼它應該是這樣 – coool 2012-03-09 19:44:43

回答

4

extend只克隆本機JS對象,而不是DOM元素。在這裏,克隆的jQuery對象仍然指向原始的DOM元素。

您需要.clone() DOM元素。

+0

我知道有克隆方法。我正在尋找克隆對象的解決方案,而不考慮JS/Dom – coool 2012-03-09 19:38:12

+0

沒有內置任何東西,你必須自己寫。 – josh3736 2012-03-09 19:39:02

+0

不能這是一個標準的事情..或我應該破解jQuery中的擴展方法來檢查它是否是dom調用它的克隆方法...我知道克隆方法工作得很好(深入) – coool 2012-03-09 19:40:27