首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >销毁一个元素会销毁该元素上的绑定吗?

销毁一个元素会销毁该元素上的绑定吗?
EN

Stack Overflow用户
提问于 2012-10-31 12:16:46
回答 2查看 331关注 0票数 1

基本上,我试图通过在任何需要的时候解绑元素来优化我的jQuery代码,或者我需要重新绑定它们,但我有一个问题,“销毁”一个元素也会销毁附加到该元素的事件吗?

代码语言:javascript
运行
复制
$(element).bind("click", function(){...});
$(element).parent().html("");

我也不确定这是否是使用.html("")完成的,我必须使用.remove()来完成吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-31 12:48:13

只要使用jQuery方法来添加/删除元素和绑定事件,一切都应该没问题。当您将一个事件绑定到一个元素(或使用类似.data()的东西)时,jQuery将此信息存储在一个名为$.cache的地方。当您使用jQuery方法操作DOM时,jQuery负责清理这些东西-因为元素和$.cache之间实际上并没有实际的连接。因此,如果您向页面添加了一个div,使用jQuery将一个click事件绑定到它,然后使用node.parentNode.removeChild(node);删除它,$.cache不会被清理。如果您需要证据,可以在jQuery源代码中查找htmlremovereplaceWith和类似的方法,您会发现类似这样的调用:

代码语言:javascript
运行
复制
jQuery.cleanData( elem.getElementsByTagName("*") );
jQuery.cleanData( [ elem ] );

这有效地清理了$.cache,因此一切都会得到处理。关键是,如果你将这个库用于(所有)你所做的事情,你就不应该担心这些事情。

不过,使用html很棘手-要小心传递给它的内容。如果您想给它传递一个新的DOM结构,比如

代码语言:javascript
运行
复制
var div = $("<div>")
              .attr("id", "div1")
              .click(function () {
                  alert("clicked");
              });

使用像$("#container").html(div);这样的东西实际上不会绑定单击事件处理程序。不过,使用像.append这样的东西就可以了。只是想指出这一点。(这与销毁/删除元素无关)

票数 2
EN

Stack Overflow用户

发布于 2012-10-31 12:22:18

如果删除该元素,DOM将不再侦听该元素内的单击。

.remove应该可以做到这一点。

代码语言:javascript
运行
复制
$(element).parent().remove();

将从DOM中删除该元素。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13151201

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档