通过一张对比表来解释2个方法之间的不同
方法名 | 参数 | 事件及数据是否也被移除 | 元素自身是否被移除 |
---|---|---|---|
remove | 支持选择器表达 | 是 | 是(无参数时),有参数时要根据参数所涉及的范围 |
detach | 参数同remove | 否 | 情况同remove |
remove:移除节点
-
无参数,移除自身整个节点以及该节点的内部的所有节点,包括节点上事件与数据
-
有参数,移除筛选出的节点以及该节点的内部的所有节点,包括节点上事件与数据
detach:移除节点
-
移除的处理与remove一致
-
与remove()不同的是,所有绑定的事件、附加的数据等都会保留下来
-
例如:$(“p”).detach()这一句会移除对象,仅仅是显示效果没有了。但是内存中还是存在的。当你append之后,又重新回到了文档流中。就又显示出来了。
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
<style type="text/css">
p {
border: 1px solid red;
}
</style>
<script src="jquery-1.11.3.js"></script>
</head>
<body>
<h3>给页面2个p元素节点绑定点击事件,点击后弹出自己本身的节点内容</h3>
<p>元素p1,同时绑定点击事件</p>
<p>元素p2,同时绑定点击事件</p>
<h3>通过点击2个按钮后观察方法处理的区别</h3>
<button>点击通过remove处理元素p1</button>
<button>点击通过detach处理元素p2</button>
</body>
<script type="text/javascript">
//给页面上2个p元素都绑定时间
$('p').click(function (e) {
alert(e.target.innerHTML)
})
$("button:first").click(function () {
var p = $("p:first").remove();
p.css('color', 'red').html('p1通过remove处理后,点击该元素,事件丢失')
$("body").append(p);
});
$("button:last").click(function () {
var p = $("p:first").detach();
p.css('color', 'blue').text('p2通过detach处理后,点击该元素事件存在')
$("body").append(p);
});
</script>
</script>
</html>