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

发布于 2024-12-06 07:56:15 字数 181 浏览 1 评论 0 原文

在 jQuery 中,如果我们使用 .remove() 来删除某个元素,那么与该元素关联的所有绑定事件和 jQuery 数据都会被删除。

但是如果我们用 .html()“删除”元素会发生什么?

我们是否需要在更改任何 html 之前取消绑定所有元素以避免内存泄漏?

In jQuery if we use .remove() for removing some element, then all bound events and jQuery data associated with the elements are removed.

But what happens if we "remove" the elements with .html()?

Do we need to unbind all the elements prior to change any html for avoiding memory leaks?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

双手揣兜 2024-12-13 07:56:15

是的,它们将被删除。 jQuery 将清理与已删除元素相关的事件等。如果您执行类似 $(elm1).html($elm2.html()) 的操作,它不会复制事件

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())

风追烟花雨 2024-12-13 07:56:15

是的,即使您使用 html(),它们也会被删除。 jQuery 源代码证实了这一点。

Yeah, they will be removed even when you use html(). The jQuery source code confirms it.

傲娇萝莉攻 2024-12-13 07:56:15

只是扩展一下:

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

Just to expand a bit:

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

2024-12-13 07:56:15

是的,最好移动元素,您不需要将它们丢失到另一个显示无容器,但使用 JavaScript appendChild 方法,因为它不复制元素,它只是将元素从一个容器发送到另一个容器,这样您就不会丢失事件听众这样。

前任

<div id="hidden_container" style="display:none;"></div>
<script>
  $("#hidden_container").get(0).appendChild("#elm_with_event").get(0));
</script>

yes, better to move elements you not need them to be lost to another display none container but use JavaScript appendChild method as it not copy element it just send the element from one container to another so you not lose event listeners this way.

ex

<div id="hidden_container" style="display:none;"></div>
<script>
  $("#hidden_container").get(0).appendChild("#elm_with_event").get(0));
</script>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文