我需要能够删除附加到元素及其所有子元素的事件,即使我不知道这些事件是什么。所有事件都使用jquery附加。
答案 0 :(得分:25)
对于jQuery 1.8及更高版本,请使用
$(element).find("*").addBack().off();
addBack()
将$(element)
中的原始元素列表添加回jQuery对象持有的元素的内部集合(find("*")
返回的元素)。 off()
删除所有附加的事件处理程序,包括使用委派的事件处理程序。
如果您只想要孩子而不是所有后代,请使用
$(element).children().addBack().off();
参见文档:
对于jQuery 1.7及更低版本,请使用andSelf()
代替addBack()
。对于jQuery 1.6及更低版本,请使用unbind()
和die()
代替off()
。例如:
$(element).children().andSelf().unbind().die();
答案 1 :(得分:2)
andSelf()函数已弃用。
使用add()函数:
$(element).add("*").off();
答案 2 :(得分:0)
对元素使用.unbind()方法。
答案 3 :(得分:0)
这不是答案,但值得一提。
我使用了没有destroy方法的第三方插件。我找到了这个解决方案,但直到我开始深入研究文档之前它才开始工作。
请注意,如果插件正在您的对象上创建$(document).on(event, handler)
侦听器,则必须通过编写$(document).off(event, 'element, element *')
来删除该操作。如果主要监听器是$(element).find("*").addBack().off();
,那么简单地写document
将不起作用。