DOM節(jié)點(diǎn)刪除之detach()和remove()區(qū)別
JQuery是一個(gè)很大強(qiáng)的工具庫,在工作開發(fā)中,有些方法因?yàn)椴怀S玫剑蚴菦]有注意到而被我們忽略。
remove()和detach()可能就是其中的一個(gè),可能remove()我們用得比較多,而detach()就可能會(huì)很少了
通過一張對比表來解釋2個(gè)方法之間的不同
方法名
|
參數(shù)
|
事件及數(shù)據(jù)是否也被移除
|
元素自身是否被移除
|
remove
|
支持選擇器表達(dá)
|
是
|
是(無參數(shù)時(shí)),有參數(shù)時(shí)要根據(jù)參數(shù)所涉及的范圍
|
detach
|
參數(shù)同remove
|
否
|
情況同remove
|
remove:移除節(jié)點(diǎn)
- 無參數(shù),移除自身整個(gè)節(jié)點(diǎn)以及該節(jié)點(diǎn)的內(nèi)部的所有節(jié)點(diǎn),包括節(jié)點(diǎn)上事件與數(shù)據(jù)
- 有參數(shù),移除篩選出的節(jié)點(diǎn)以及該節(jié)點(diǎn)的內(nèi)部的所有節(jié)點(diǎn),包括節(jié)點(diǎn)上事件與數(shù)據(jù)
detach:移除節(jié)點(diǎn)
- 移除的處理與remove一致
- 與remove()不同的是,所有綁定的事件、附加的數(shù)據(jù)等都會(huì)保留下來
- 例如:$("p").detach()這一句會(huì)移除對象,僅僅是顯示效果沒有了。但是內(nèi)存中還是存在的。當(dāng)你append之后,又重新回到了文檔流中。就又顯示出來了。
具體可以參考右邊的代碼區(qū)域的對比
<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="http://idcbgp.cn/static/lib/jquery/1.9.1/jquery.js"></script>
</head>
<body>
<h3>給頁面2個(gè)p元素節(jié)點(diǎn)綁定點(diǎn)擊事件,點(diǎn)擊后彈出自己本身的節(jié)點(diǎn)內(nèi)容</h3>
<p>元素p1,同時(shí)綁定點(diǎn)擊事件</p>
<p>元素p2,同時(shí)綁定點(diǎn)擊事件</p>
<h3>通過點(diǎn)擊2個(gè)按鈕后觀察方法處理的區(qū)別</h3>
<button>點(diǎn)擊通過remove處理元素p1</button>
<button>點(diǎn)擊通過detach處理元素p2</button>
</body>
<script type="text/javascript">
//給頁面上2個(gè)p元素都綁定時(shí)間
$('p').click(function(e) {
alert(e.target.innerHTML)
})
$("button:first").click(function() {
var p = $("p:first").remove();
p.css('color','red').text('p1通過remove處理后,點(diǎn)擊該元素,事件丟失')
$("body").append(p);
});
$("button:last").click(function() {
var p = $("p:first").detach();
p.css('color','blue').text('p2通過detach處理后,點(diǎn)擊該元素事件存在')
$("body").append(p);
});
</script>
</script>
</html>
請驗(yàn)證,完成請求
由于請求次數(shù)過多,請先驗(yàn)證,完成再次請求