我正在通过来注册DOM元素上的点击侦听器jQuery.on()
。如果稍后将该元素从DOM中删除-也许是间接地(例如,通过替换某些父对象的内容)$(parent).html(...)
,我是否还要麻烦通过删除处理程序jQuery.off()
?
即使该元素不再触发任何事件,我也担心潜在的内存泄漏。一旦从DOM中删除了一个元素,jQuery或浏览器是否会处理并丢弃所有已注册的处理程序?
即使该元素不再触发任何事件,我也担心潜在的内存泄漏。
这是一个很好的关注。要回答您的问题,请看一下$.fn.html
实现。从那里您将学到html
尝试清除存储的事件数据的方法:
// Remove element nodes and prevent memory leaks
if (elem.nodeType === 1) {
jQuery.cleanData(getAll(elem, false));
elem.innerHTML = value;
}
因此,在这种情况下,.off()
不需要手动调用。然而..
您需要记住,永远不要尝试使用本机方法(例如removeChild
或set)来删除元素innerHTML
,因为在这种情况下,肯定会发生内存泄漏(如果存储了某些数据,则jQuery将注册事件等)。在这种情况下,用.off
method实际注销事件处理程序会更可靠。或更好地使用事件传播,而不是或html('')
使用$.fn.remove
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句