20

我想<select>用它的数据属性克隆一个标签,但没有它的事件。

JQuery Official .clone() api之后,我知道我可以通过调用克隆没有数据和事件 $('#grolsh').clone(),或者执行

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

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

4

5 回答 5

20

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

$('#grolsh').clone(true).off();
于 2012-10-30T15:19:36.063 回答
11

只需使用

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

$('#grolsh').clone(true)//复制数据和事件以及结构

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

使用;绑定.on()和删除的事件.off()

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

于 2012-10-30T15:23:59.117 回答
2

通过添加.off()

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

更新: 正如 Adrian 所建议的, .off将是比.unbind更好的解决方案

于 2012-10-30T15:18:49.570 回答
1

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

$('#grolsh').clone(true,false);
于 2016-03-02T05:06:09.620 回答
0

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

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

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

!重要的提示!
如果您要使用存储 DOM 引用并使用它的东西,例如jQuery UI 可拖动等...
=> 仅用于“纯”数据/基本类型,则不能这样做

于 2016-04-14T22:00:39.723 回答