从所有元素中删除所有处理程序

时间:2013-03-21 21:25:06

标签: jquery event-handling

有很多关于如何从元素中删除所有“特定”处理程序(例如onclick)或从元素中清除所有事件等的问题。

  1. How to remove all Click event handlers in Jquery
  2. Jquery: how to release all event handlers, dom changes?
  3. 这个问题有点宽泛。我们在IE7和IE8下的asp.net站点面临巨大的内存泄漏,并且缩小这些泄漏的一个调整是解除页面上所有元素的所有事件的绑定。基本上这个:

    $('*').off();
    

    现在,我们正在努力提高应用程序的性能,毫不奇怪,这条特定的产品线是热点之一。

    所以,问题是:有没有办法实现相同的结果(明确地从文档中的所有元素中删除所有处理程序)?

    禁止选择:

    • “重新加载页面” - 内存泄漏以这种方式保留。
    • “每次你附加一个处理程序,你将它存储在一个数组中” - 有太多这样的地方

    我想到的是使用一些jQuery内部(甚至可能是非公共API)来利用附加处理程序的元素检测。但它略高于我目前对jQuery的能力。如果有帮助,我们的目标是jQuery 1.7.1。

1 个答案:

答案 0 :(得分:1)

我想你可以创建像hasEvent这样的东西来检测事件,但我怀疑你的问题比在没有事件的元素上调用.off()更能遍历dom。你可以测试一下以确保它。

根据应用程序的性质,您可以通过调整选择器来更精确地定位元素,从而获得一些性能 请参阅:http://www.artzstudio.com/2009/04/jquery-performance-rules/

另一个想法是override jQuery functions添加您的事件处理程序,以便您可以填充数组供以后使用。它不需要修改你的数百个文件,但仍然可以让你更直接地访问以供以后操作。

相关问题