使用.html()删除元素时,是否会自动删除jQuery中的事件侦听器?

时间:2021-01-18 00:02:33

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
  • .remove(),. html(),. empty()等 - 都删除了侦听器

  • .detach() does not remove listeners
  • .detach()不会删除侦听器

  • .clone() has parameters letting you decide if data/listeners are copied
  • .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
  • .remove(),. html(),. empty()等 - 都删除了侦听器

  • .detach() does not remove listeners
  • .detach()不会删除侦听器

  • .clone() has parameters letting you decide if data/listeners are copied
  • .clone()具有参数,可让您决定是否复制数据/侦听器

So if you want to retain listeners, use .detach().

因此,如果要保留侦听器,请使用.detach()。