将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。不优雅。)
谁有更好的想法?
使用withDataandEvents
和deepWithDataAndEvents
复制元素和克隆元素的所有子元素的事件和数据。
$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