说,我有一个元素<img id="foo" />
并附加了一些事件,例如click
(不是内联onclick
!)。
// somewhere i wrote
foo.addEventListener("click", clickHandler, false);
...
// somewhere i will write
foo.parentNode.removeChild(foo);
我是否也需要删除所有活动?
答案 0 :(得分:8)
documentation on jQuery's empty()
method说:
为了避免内存泄漏,jQuery会删除 其他结构,如数据和 来自子元素的事件处理程序 在删除元素之前 自己。
所以:1)如果我们没有明确删除事件处理程序,我们会发生内存泄漏,2)通过使用empty()
,我们可以避免这种内存泄漏。
另见do-events-handlers-on-a-dom-node-get-deleted-with-the-node
答案 1 :(得分:5)
从DOM中删除元素不会(或不应该)删除任何侦听器;毕竟,你很可能只是在重新安排你的DOM元素,因此你不想丢弃任何听众。
您可以在之前或之后删除侦听器,它不会有任何区别。
如果您的计划是删除元素,并且不再使用它们,那么继续删除事件以避免任何内存泄漏的可能性是明智的。