2

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

  1. 如何删除 Jquery 中的所有 Click 事件处理程序
  2. Jquery:如何释放所有事件处理程序,dom更改?

这个问题有点宽泛。我们在 IE7 和 IE8 下的 asp.net 站点中面临巨大的内存泄漏,而缩小这些泄漏的调整之一是取消绑定页面上所有元素的所有事件。基本上是这样的:

$('*').off();

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

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

禁止选项:

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

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

4

1 回答 1

1

我想你可以创建类似hasEvent的东西来检测事件,但我怀疑你的问题更多的是遍历 dom,而不是调用.off()没有事件的元素。您可以对其进行测试以确保。

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

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

于 2013-03-22T02:21:55.267 回答