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

时间:2014-12-15 16:26:46

标签: javascript jquery

我很惊讶地看到jQuery没有在$.clone()操作的结果元素中包含任何功能来调用源元素。我的解决方法是简单地将原始元素的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。不优雅。)

任何人都有更好的想法吗?

2 个答案:

答案 0 :(得分:0)

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

$elClone.clone(true, true);

来自docs -

  

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

答案 1 :(得分:0)

修改,更新

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())

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div>abc</div>
&#13;
&#13;
&#13;