使用.html()删除元素时,是否会自动删除jQuery中的事件侦听器?
在jQuery中,如果我们使用.remove()
来删除某些元素,那么将删除与元素关联的所有绑定事件和jQuery数据。
但是如果我们用.html()
“删除”元素会发生什么?
我们是否需要在更改任何html之前取消绑定所有元素以避免内存泄漏?
是的,他们将被删除。 jQuery将清理与删除的元素相关的事件等。 如果您执行类似$(elm1).html($ elm2.html())的操作,则不会复制事件
是的,即使你使用html()
,它们也会被删除。 jQuery 源代码证实了这一点。
只是扩大一点:
-
.remove()
.empty()
.html()
.empty()
等 – 都删除了侦听器 -
.detach()
不会删除侦听器 -
.clone()
具有参数,可让您决定是否复制数据/侦听器
因此,如果要保留侦听器,请使用.detach()
。