如何使用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等,你不能这样做……
=>仅用于“纯”数据/基本类型