我已经通过jQuery文档查看了这个简单问题的答案:
是
replaceWith()打电话remove()还是detach()引擎盖下?
我对官方文件没有好运; 它被明确地定义为删除节点.但测试显示内存泄漏.
Mat*_*att 16
看一下jQuery(2.1.1)的源代码,你会问两个不同的问题.
jQuery是否replaceWith()删除了事件处理程序?
是.jQuery调用cleanData(),这是一个删除元素上所有数据的内部方法.由于jQuery事件处理程序存储在元素数据中,因此它们也将被清理.
cleanData() 还通过调用jQuery.removeEvent()(另一个内部方法)删除附加到元素的事件处理程序,该事件处理程序触发存储在元素数据中的所有事件处理程序的执行.
是replaceWith()打电话remove()还是detach()引擎盖下?
该只调用时间remove()是如果没有提供的参数来replaceWith(); jQuery把它看作是你打电话remove()而不是replaceWith();
TL; DR:jQuery将为您清理所有内容,因此不存在内存泄漏的风险.
FYW 如果您不希望这种行为,请查看有关 jQuery 票证的这个讨论不佳的线程 http://bugs.jquery.com/ticket/13400
而对于那些惯于谁想到准备代码,这里是一个实现的的replaceWith使用detach,而不是remove
与删除()
old.replaceWith( new );
与分离()
old.before( new ).detach();