jQuery 中的 clone(true) + remove() 与 detach()

Posted

技术标签:

【中文标题】jQuery 中的 clone(true) + remove() 与 detach()【英文标题】:clone(true) + remove() vs. detach() in jQuery 【发布时间】:2010-02-16 18:21:34 【问题描述】:

是的用法

e = elem.clone(true);
elem.remove();

相同
e = elem.detach();

如果稍后我将其附加

e.appendTo($("#someDiv"));

在 jQuery 1.4 中? clone(true) 方法会保留使用 detach() 的所有内容吗?

【问题讨论】:

【参考方案1】:

相同但不同:如果您只是克隆一个节点而不将其分配给变量,您将失去复制节点的引用,因此任何机会获得其事件处理程序和其他数据(不太正确,但它是一个 PITA )。

编辑 是的,持有对克隆元素的引用,您就有了一个精确的副本(但请注意真正的参数),以后可以将其附加到 DOM。

【讨论】:

更新了问题以更好地反映我正在尝试做的事情。并不是要失去参考。想知道引用是否在两种情况下都包含相同的数据【参考方案2】:

按照我的阅读方式,这些是等效的方法:

来自documentation for detach():

.detach() 方法与 .remove(),除了 .detach() 保持 所有与 删除的元素。这种方法是 当要移除元素时很有用 稍后重新插入 DOM 时间。

来自documentation for clone():

.clone( [ withDataAndEvents ] )

withDataAndEvents 一个布尔值,表示 事件处理程序是否应该 与元素一起复制。作为 jQuery 1.4 元素数据将被复制 也是。

【讨论】:

以上是关于jQuery 中的 clone(true) + remove() 与 detach()的主要内容,如果未能解决你的问题,请参考以下文章

jQuery clone( ) 方法

jQuery文档操作之克隆操作

jQuery-DOM操作之复制替换包裹节点

jQuery学习-克隆节点

jquery模态对话框与clone的应用

Jquery浅克隆与深克隆