Javascript 在jQuery.clone()元素中维护对原始元素的引用

Javascript 在jQuery.clone()元素中维护对原始元素的引用,javascript,jquery,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('

我惊讶地看到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。这并不优雅。)


有谁有更好的想法吗?使用
withDataandEvents
deepWithDataAndEvents
复制元素和克隆元素的所有子元素的事件和数据

$elClone.clone(true, true);
从—

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

编辑,更新

jQuery的
prevObject
属性显示为保存对原始对象的引用

Try(v3)

var$elOriginal=$(“div”);
var$elClone=$(“div”).clone(true,true);
$elClone.html(123);
$(“正文”)。追加($elClone);
console.log($elClone.prevObject.html())


abc
既然
$elClone
只是一个对象,为什么不做一些类似
$elClone.original=$elOriginal
的事情呢?它将提供与
$elClone.context
相同的功能,只是一种不同的contextWell,向克隆对象添加属性可能是最好的解决方案,因为
.data
被设置为DOM元素。@plantheidea。但这真的是一种进步吗?它是否以任何方式提高了性能?@Karl AndréGagnon但是如果原始元素被删除,我会保留对不再存在的元素的表示的引用。。。“这可能是有用的,也可能是令人困惑的。”卡尔·安德烈·加农在这种情况下,我坚持纠正。我误解了你的第一篇帖子。
@plantheidea
建议的内容类似于
$.data()
解决方案。当然,除了我的克隆上的
$.remove
会蒸发数据存储,而您的对象属性仍然存在。你说得对,这没什么好混淆的好吧,我如何从克隆的上下文中引用原始元素?为什么需要?在我的例子中,为了保留原始元素所属列表的排序顺序。为什么让元素的克隆更改原始元素在其原始元素中的排序顺序?这不是讨论的重点,Jay。我不必详细说明我的实现。只需说,我需要原始元素索引进行排序。克隆是另一个列表的一部分。但是现在,请看,我将进入我的实现…您的解决方案听起来很好,但是克隆不包含对其源的引用。除非你建议我为每个克隆/源代码对创建一个堆栈,并构建一个字典的特例,比如说,
elems[0]
是源代码,
elems[1]
是克隆。但是,尽管如此,我还是在寻找一种解决方案,在克隆jQuery对象(或者更好的克隆domeElement)的上下文中保存对源代码的引用。@seebackie是的,最初的方法是为每个原始克隆对创建一对,能够使用
.eq()
方法进行引用。或者,在创建克隆之后,
$(选择器).prevObject
显示为保留对原始元素的引用。见更新后的帖子。感谢我的发现(关于这方面的文档很少)
prevObject
维护了对函数链上最后一个对象的引用。因此,从长远来看,这可能不是一个稳定的解决方案。利用
prevObject
,因为它似乎返回了期望的结果。未使用多个元素进行测试,或未包含其他条件。如果可能,可以发布jquery
prevObject
上的文档/说明链接吗?谢谢
var $elOriginal = $("div");
var $elClone = $("div").clone(true, true);
$elClone.html(123);
$("body").append($elClone);
console.log($elClone.prevObject.html())