如何通过命名空间从所有DOM元素中有效地删除事件侦听器

How to efficiently remove event listeners by namespace from ALL DOM elements?

本文关键字:有效地 删除 事件 侦听器 元素 DOM 命名空间 何通过      更新时间:2023-09-26

我知道我可以这样做:$('*').off('.namespace');

但我觉得*不是一个好主意,因为jQuery将遍历整个DOM树,这会很慢。

jQuery的内部$.cache包含有关通过.on() 绑定的事件侦听器的信息

有没有什么方法可以告诉jQuery只需通过内部缓存,并从任何元素中删除特定命名空间中的所有事件侦听器,而不必* DOM树?

编辑:问题是我不知道监听器绑定到了哪些元素-我只知道它们绑定到了哪个命名空间。

当您将事件绑定到每个元素时,为什么不在它上面加一个钩子呢?

$('.some_el').addClass('has_foo_event').on('click.foo', function() {});

然后

$('.has_foo_event').off('.foo');