将jQuery.clone()元素中的引用保持为原始元素

我很惊讶地看到jQuery没有在$.clone()操作的结果元素中包含任何function来调用源元素。 我的解决方法是简单地将原始元素的jQuery对象包含在克隆的数据存储中,就像这样

 var $elOriginal = $('SomeUniqueSelector'); var $elClone = $elOriginal); // Save a jQuery object of the original element in the // clone's data store $elClone.data('original', $elOriginal); 

当我需要引用原文时,我会深入到我的克隆数据存储中,

 $elOriginal = $elClone.data('original'); 

就个人而言,我对此方法并不感到兴奋。 (当然我考虑用id标记原始元素并简单地存储它,但后来我不得不在元素中添加一个id。不优雅。)

谁有更好的想法?

使用withDataandEventsdeepWithDataAndEvents复制元素和克隆元素的所有子元素的事件和数据。

 $elClone.clone(true, true); 

来自文档 –

通常,绑定到原始元素的任何事件处理程序都不会复制到克隆。 可选的withDataAndEvents参数允许我们更改此行为,并改为将所有事件处理程序的副本绑定到元素的新副本。 从jQuery 1.4开始,所有元素数据(由.data()方法附加)也会复制到新副本。 从jQuery 1.5开始,withDataAndEvents可以选择使用deepWithDataAndEvents进行增强,以复制克隆元素的所有子元素的事件和数据。

编辑,更新

jQuery的prevObject属性似乎保存对原始对象的引用

试试(v3)

 var $elOriginal = $("div"); var $elClone = $("div").clone(true, true); $elClone.html(123); $("body").append($elClone); console.log($elClone.prevObject.html()) 
  var $elOriginal = $("div"); var $elClone = $("div").clone(true, true); $elClone.html(123); $("body").append($elClone); console.log($elClone.prevObject.html()) 
  
abc