如何高效地从所有DOM元素中按命名空间删除事件监听器?

3

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

但我感觉使用*并不是一个好主意,因为jQuery会遍历整个DOM树,这会导致速度变慢。

jQuery内部的$.cache包含了通过.on()绑定的事件监听器的信息。

有没有办法告诉jQuery只需遍历内部缓存,并从任何元素中删除特定命名空间的所有事件监听器 - 而不必遍历DOM树?

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

1个回答

0
为什么不在绑定事件时,对每个元素都放置一个钩子呢?
$('.some_el').addClass('has_foo_event').on('click.foo', function() {});

那么

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

这就是我想要做的,但问题是我不知道监听器绑定到哪些元素。我只知道它们使用的命名空间。 - Rudi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接