我想<select>
用它的数据属性克隆一个标签,但没有它的事件。
在JQuery Official .clone() api之后,我知道我可以通过调用克隆没有数据和事件
$('#grolsh').clone()
,或者执行
$('#grolsh').clone(true)
这将复制数据和事件。
我想保留数据但清除与原始项目关联的事件。
我想<select>
用它的数据属性克隆一个标签,但没有它的事件。
在JQuery Official .clone() api之后,我知道我可以通过调用克隆没有数据和事件
$('#grolsh').clone()
,或者执行
$('#grolsh').clone(true)
这将复制数据和事件。
我想保留数据但清除与原始项目关联的事件。
从 1.7 版开始,off()
是解除绑定的首选方法:
$('#grolsh').clone(true).off();
只需使用
$('#grolsh').clone();
//复制元素结构
$('#grolsh').clone(true)
//复制数据和事件以及结构
$('#grolsh').clone(true).off()
//复制数据和事件并删除处理程序
使用;绑定.on()
和删除的事件.off()
使用;绑定.bind()
和删除的事件.unbind()
通过添加.off():
$('#grolsh').clone(true)
.attr({'id': 'newGrolsh'})
.off()
.appendTo('#target');
更新: 正如 Adrian 所建议的, .off将是比.unbind更好的解决方案
从 jQuery 版本 1.5 开始,您可以传递第二个参数(参见:.clone( [withDataAndEvents ] [, deepWithDataAndEvents ] ))而不是复制事件处理程序:
$('#grolsh').clone(true,false);
如果您真的只想复制该.data()
方法附加的数据,请不要滥用事件(取消)绑定,只需执行以下操作:
var $original = $(".originalSelector");
var $clone = $original.clone().data( $original.data() );
因为当您将对象传递给.data()
方法时,它会用它扩展当前数据。
!重要的提示!
如果您要使用存储 DOM 引用并使用它的东西,例如jQuery UI 可拖动等...
=> 仅用于“纯”数据/基本类型,则不能这样做