In jQuery if we use .remove()
for removing some element, then all bound events and jQuery data associated with the elements are removed.
在jQuery中,如果我们使用.remove()来删除某些元素,那么将删除与元素关联的所有绑定事件和jQuery数据。
But what happens if we "remove" the elements with .html()
?
但是如果我们用.html()“删除”元素会发生什么?
Do we need to unbind all the elements prior to change any html for avoiding memory leaks?
我们是否需要在更改任何html之前取消绑定所有元素以避免内存泄漏?
3 个解决方案
#1
15
Yes, they will be removed. jQuery will clean up events etc related to the removed elements. It will NOT copy events if you do something like $(elm1).html($elm2.html())
是的,他们将被删除。 jQuery将清理与删除的元素相关的事件等。如果您执行类似$(elm1).html($ elm2.html())的操作,则不会复制事件
#2
12
Yeah, they will be removed even when you use html()
. The jQuery source code confirms it.
是的,即使你使用html(),它们也会被删除。 jQuery源代码证实了这一点。
#3
1
Just to expand a bit:
只是扩大一点:
-
.remove()
,.html()
,.empty()
, etc - all remove listeners -
.detach()
does not remove listeners -
.clone()
has parameters letting you decide if data/listeners are copied
.remove(),. html(),. empty()等 - 都删除了侦听器
.detach()不会删除侦听器
.clone()具有参数,可让您决定是否复制数据/侦听器
So if you want to retain listeners, use .detach()
.
因此,如果要保留侦听器,请使用.detach()。
#1
15
Yes, they will be removed. jQuery will clean up events etc related to the removed elements. It will NOT copy events if you do something like $(elm1).html($elm2.html())
是的,他们将被删除。 jQuery将清理与删除的元素相关的事件等。如果您执行类似$(elm1).html($ elm2.html())的操作,则不会复制事件
#2
12
Yeah, they will be removed even when you use html()
. The jQuery source code confirms it.
是的,即使你使用html(),它们也会被删除。 jQuery源代码证实了这一点。
#3
1
Just to expand a bit:
只是扩大一点:
-
.remove()
,.html()
,.empty()
, etc - all remove listeners -
.detach()
does not remove listeners -
.clone()
has parameters letting you decide if data/listeners are copied
.remove(),. html(),. empty()等 - 都删除了侦听器
.detach()不会删除侦听器
.clone()具有参数,可让您决定是否复制数据/侦听器
So if you want to retain listeners, use .detach()
.
因此,如果要保留侦听器,请使用.detach()。