我看到通过.on()注册的事件处理程序保存在$.cache中.
我也看到事件处理程序也被保存在$(elem).data()中.
我也看到事件处理程序也被保存在$(elem).data()中.
$.cache中保存的对象是指注册事件的DOM节点.当DOM节点分离时,这会导致内存泄漏,这使得.off()调用成为必需.
我有一种情况,我不知道DOM节点(我附加到事件处理程序)何时被分离.虽然我可以在我的代码中保留对该DOM节点的引用,并调用.off()来清理它,但是看起来不太好,因为不清楚DOM节点何时被删除.
这样做最好的方法是什么?
解决方法
“What is the best way to do this?”
如果您要使用jQuery,则必须使用其API来删除元素,并且必须使用正确的方法,否则,如您所述,您将有内存泄漏.
如果您不知道DOM节点何时被删除,并且如果导致泄漏,我会假设这意味着您正在jQuery旁边使用另一个库.这不是一个好主意,因为这个原因.
你需要确保任何受jQuery影响的元素都被jQuery删除.还有一些数据存储在$.cache中,您没有明确设置.这意味着应该使用jQuery删除所有元素,而不是仅仅是您认为可能具有数据的元素.
“What is the purpose of
$.cache
in jQuery?”
将处理程序和其他数据与元素相关联.数据和元素之间的链接基本上是存储在元素上的expando属性上的序列号.
如果您删除没有jQuery的元素,$.cache中的关联数据是孤立的.
这种方法的目的是为了防止潜在的泄漏.不幸的是,它可能会造成更严重的泄漏.