jQuery的replaceWith()是否也删除了事件处理程序?

Cla*_*ule 10 jquery

我已经通过jQuery文档查看了这个简单问题的答案:

replaceWith()打电话remove()还是detach()引擎盖下?

我对官方文件没有好运; 它被明确地定义为删除节点.但测试显示内存泄漏.

Mat*_*att 16

看一下jQuery(2.1.1)的源代码,你会问两个不同的问题.

  1. jQuery是否replaceWith()删除了事件处理程序?

    是.jQuery调用cleanData(),这是一个删除元素上所有数据的内部方法.由于jQuery事件处理程序存储在元素数据中,因此它们也将被清理.

    cleanData() 通过调用jQuery.removeEvent()(另一个内部方法)删除附加到元素的事件处理程序,该事件处理程序触发存储在元素数据中的所有事件处理程序的执行.

  2. replaceWith()打电话remove()还是detach()引擎盖下?

    调用时间remove()是如果没有提供的参数来replaceWith(); jQuery把它看作是你打电话remove()而不是replaceWith();


TL; DR:jQuery将为您清理所有内容,因此不存在内存泄漏的风险.


aem*_*nge 5

FYW 如果您不希望这种行为,请查看有关 jQuery 票证的这个讨论不佳的线程 http://bugs.jquery.com/ticket/13400

而对于那些惯于谁想到准备代码,这里是一个实现的的replaceWith使用detach,而不是remove

与删除()

old.replaceWith( new );

与分离()

old.before( new ).detach();