假设我有一个元素,如 <img id="foo" />
并且已经附加了一些事件,例如 click
(不是内联的 onclick
!)
// somewhere i wrote
foo.addEventListener("click", clickHandler, false);
...
// somewhere i will write
foo.parentNode.removeChild(foo);
我需要删除所有事件吗?
假设我有一个元素,如 <img id="foo" />
并且已经附加了一些事件,例如 click
(不是内联的 onclick
!)
// somewhere i wrote
foo.addEventListener("click", clickHandler, false);
...
// somewhere i will write
foo.parentNode.removeChild(foo);
为了避免内存泄漏,jQuery 在删除子元素之前会删除其他构造(如数据和事件处理程序)。
所以:1)如果我们没有显式地删除事件处理程序,就会发生内存泄漏;2)通过使用 empty()
方法,我们可以避免内存泄漏。
还可参见此问题的讨论。
从DOM中删除元素不会(或不应该)删除任何监听器;毕竟,您可能正在重新排列DOM元素的过程中,因此您不想丢弃任何监听器。
您可以在之前或之后删除监听器,这应该没有任何区别。
如果您计划删除元素并不再使用它们,则最好先删除事件以避免任何可能的内存泄漏。