我给dom添加了一个span,然后给这span绑定click事件,然后将span元素从dom中移除,那么它所绑定的click事件浏览器会如何处理?
我给dom添加了一个span,然后给这span绑定click事件,然后将span元素从dom中移除,那么它所绑定的click事件浏览器会如何处理?
研究理工科问题,实验总是少不了的,
https://jsfiddle.net/rafq1vty/
给 span 添加了事件之后再删除,再恢复回来,事件依然有效。试验结论:span 从 DOM 中删除了,但是对象还在啊,它的属性、事件这些都还在啊,所以再加回 DOM,仍然有效。
8 回答4.6k 阅读✓ 已解决
6 回答3.3k 阅读✓ 已解决
5 回答2.8k 阅读✓ 已解决
5 回答6.3k 阅读✓ 已解决
4 回答2.2k 阅读✓ 已解决
4 回答2.7k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
这个事情得分说
使用
Node.removeChild(element)
和ChildNode.remove()
并不会直接释放对应的event listener
,但是会被gc
。如果该dom对象在js中再无其他引用,与之绑定的event listener
就会在合理的时机被gc。如果被remove的dom对象没有其他引用,你并不需要手动解绑事件
也正是因为dom的删除,不会直接删掉对应的
event listener
这一特性,才会因为部分早期版本的浏览器(特别是IE)中gc算法的不完善,导致javascript的Memory LeakjQuery中的
remove
方法,会在移除dom元素的同时,调用一个内部函数cleanData
将所有子节点及相关的event listener
全部移除