如何使用JQuery克隆没有事件的数据元素

我想用它的数据属性克隆标签但没有它的事件。

遵循JQuery官方.clone()api ,我知道我可以通过调用$('#grolsh').clone()来克隆没有数据和事件$('#grolsh').clone() ,或执行一个

$('#grolsh').clone(true)将复制数据和事件。

我想保留数据,但要清除与原始项目关联的事件。

从版本1.7开始, off()是解除绑定的首选方法:

 $('#grolsh').clone(true).off(); 

只是用

$('#grolsh').clone(); // 复制元素结构

$('#grolsh').clone(true) // 将数据和事件与结构一起复制

$('#grolsh').clone(true).off() // 复制数据和事件并删除处理程序

事件与.on()绑定并使用.on()删除;

.bind()绑定的事件,并使用.unbind()删除;

通过添加.off()

 $('#grolsh').clone(true) .attr({'id': 'newGrolsh'}) .off() .appendTo('#target'); 

更新:正如阿德里安所说, .off将是一个比.unbind更好的解决方案

从jQuery 1.5版开始,你可以传递第二个参数(参见: .clone([withDataAndEvents] [,deepWithDataAndEvents]) )而不是复制事件处理程序:

 $('#grolsh').clone(true,false); 

如果您真的只想复制.data()方法附加的数据, 请不要滥用事件(un)绑定 ,只需执行以下操作:

 var $original = $(".originalSelector"); var $clone = $original.clone().data( $original.data() ); 

因为当您将对象传递给.data()方法时,它会使用它扩展当前数据。

!重要的提示!
如果你打算使用存储DOM引用的东西并使用它,例如jQuery UI draggable等,你不能这样做……
=>仅用于“纯”数据/基本类型