jQuery中DOM節(jié)點(diǎn)的刪除方法總結(jié)(超全面)
前言
相信大家都知道,要移除頁面上節(jié)點(diǎn)是開發(fā)者常見的操作,jQuery提供了幾種不同的方法用來處理這個問題。下面本文就進(jìn)行一個詳細(xì)的介紹,感興趣的朋友們一起來看看吧。
一、empty
empty 顧名思義,清空方法,但是與刪除又有點(diǎn)不一樣,因?yàn)樗灰瞥?指定元素中的所有子節(jié)點(diǎn)。
這個方法不僅移除子元素(和其他后代元素),同樣移除元素里的文本。因?yàn)?,根?jù)說明,元素里任何文本字符串都被看做是該元素的子節(jié)點(diǎn)。如果我們通過empty方法移除里面div的所有元素,它只是清空內(nèi)部的html代碼,但是標(biāo)記仍然留在DOM中,通過empty移除了當(dāng)前div元素下的所有p元素 但是本身id=test的div元素沒有被刪除。
$("button").on('click', function() {
//通過empty移除了當(dāng)前div元素下的所有p元素
//但是本身id=test的div元素沒有被刪除
$("#test").empty()
})
二、remove
remove與empty一樣,都是移除元素的方法,但是remove會將元素自身移除,同時(shí)也會移除元素內(nèi)部的一切,包括綁定的事件及與該元素相關(guān)的jQuery數(shù)據(jù)。
例如一段節(jié)點(diǎn),綁定點(diǎn)擊事件,如果不通過remove方法刪除這個節(jié)點(diǎn)其實(shí)也很簡單,但是同時(shí)需要把事件給銷毀掉,這里是為了防止"內(nèi)存泄漏",所以前端開發(fā)者一定要注意,綁了多少事件,不用的時(shí)候一定要記得銷毀。通過remove方法移除div及其內(nèi)部所有元素,remove內(nèi)部會自動操作事件銷毀方法,所以使用使用起來非常簡單
remove表達(dá)式參數(shù):
remove比empty好用的地方就是可以傳遞一個選擇器表達(dá)式用來過濾將被移除的匹配元素集合,可以選擇性的刪除指定的節(jié)點(diǎn),我們可以通過$()選擇一組相同的元素,然后通過remove()傳遞篩選的規(guī)則,如:$("p").filter(":contains('3')").remove()。
<body>
<style>
.test1 {
background: #bbffaa;
}
.test2 {
background: yellow;
}
</style>
<h2>通過jQuery remove方法移除元素</h2>
<div class="test1">
<p>p元素1</p>
<p>p元素2</p>
</div>
<div class="test2">
<p>p元素3</p>
<p>p元素4</p>
</div>
<button>點(diǎn)擊通過jQuery的empty移除元素</button>
<button>點(diǎn)擊通過jQuery的empty移除指定元素</button>
<script type="text/javascript">
$("button:first").on('click', function() {
//刪除整個 class=test1的div節(jié)點(diǎn)
$(".test1").remove()
})
$("button:last").on('click', function() {
//找到所有p元素中,包含了3的元素
//這個也是一個過濾器的處理
$("p").remove(":contains('3')")
})
</script>
</body>
empty和remove區(qū)別
用到移除指定元素的時(shí)候,jQuery提供了empty()與remove([expr])二個方法,兩個都是刪除元素,但是兩者還是有區(qū)別
empty方法
- 嚴(yán)格地講,
empty()方法并不是刪除節(jié)點(diǎn),而是清空節(jié)點(diǎn),它能清空元素中的所有后代節(jié)點(diǎn)
- empty不能刪除自己本身這個節(jié)點(diǎn)
remove方法
- 該節(jié)點(diǎn)與該節(jié)點(diǎn)所包含的所有后代節(jié)點(diǎn)將同時(shí)被刪除
- 提供傳遞一個篩選的表達(dá)式,用來指定刪除選中合集中的元素
三、detach
如果我們希望臨時(shí)刪除頁面上的節(jié)點(diǎn),但是又不希望節(jié)點(diǎn)上的數(shù)據(jù)與事件丟失,并且能在下一個時(shí)間段讓這個刪除的節(jié)點(diǎn)顯示到頁面,這時(shí)候就可以使用detach方法來處理detach從字面上就很容易理解。讓一個web元素托管。即從當(dāng)前頁面中移除該元素,但保留這個元素的內(nèi)存模型對象。
官方解釋:這個方法不會把匹配的元素從jQuery對象中刪除,因而可以在將來再使用這些匹配的元素。與remove()不同的是,所有綁定的事件、附加的數(shù)據(jù)等都會保留下來。 $("div").detach()這一句會移除對象,僅僅是顯示效果沒有了。但是內(nèi)存中還是存在的。當(dāng)你append之后,又重新回到了文檔流中。就又顯示出來了。
當(dāng)然這里要特別注意,detach方法是JQuery特有的,所以它只能處理通過JQuery的方法綁定的事件或者數(shù)據(jù)
通過 $("p").detach()把所有的P元素元素刪除后,在通過append把刪除的p放到頁面上,可以通過點(diǎn)擊文字測試,事件沒有丟失
<body>
<p>P元素1,默認(rèn)給綁定一個點(diǎn)擊事件</p>
<p>P元素2,默認(rèn)給綁定一個點(diǎn)擊事件</p>
<button id="bt1">點(diǎn)擊刪除 p 元素</button>
<button id="bt2">點(diǎn)擊移動 p 元素</button>
<script type="text/javascript">
$('p').click(function(e) {
alert(e.target.innerHTML)
})
var p;
$("#bt1").click(function() {
if (!$("p").length) return; //去重
//通過detach方法刪除元素
//只是頁面不可見,但是這個節(jié)點(diǎn)還是保存在內(nèi)存中
//數(shù)據(jù)與事件都不會丟失
p = $("p").detach()
});
$("#bt2").click(function() {
//把p元素在添加到頁面中
//事件還是存在
$("body").append(p);
});
</script>
</body>
detach()和remove()區(qū)別
JQuery是一個很大強(qiáng)的工具庫,在工作中開發(fā)中,可是有些方法還是因?yàn)椴怀S玫?,或是沒有注意到而被我們而忽略。remove()和detach()可能就是其中的一個,可能remove()我們用得比較多,而detach()就可能會很少了
通過一張對比表來解釋2個方法之間的不同
| 方法名 | 參數(shù) | 事件及數(shù)據(jù)是否也被移除 | 元素自身是否被移除 |
| remove | 支持選擇器表達(dá) | 是 | 是(無參數(shù)時(shí)),有參數(shù)時(shí)要根據(jù)參數(shù)所涉及的范圍 |
| detach | 參數(shù)同remove | 否 | 情況同remove |
remove:移除節(jié)點(diǎn)
- 無參數(shù),移除自身整個節(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ù)等都會保留下來
- 例如:
$("p").detach()這一句會移除對象,僅僅是顯示效果沒有了。但是內(nèi)存中還是存在的。當(dāng)你append之后,又重新回到了文檔流中。就又顯示出來了。
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流。
- JQuery創(chuàng)建DOM節(jié)點(diǎn)的方法
- JS/jQuery判斷DOM節(jié)點(diǎn)是否存在的簡單方法
- JQuery插入DOM節(jié)點(diǎn)的方法
- JQuery遍歷DOM節(jié)點(diǎn)的方法
- JQuery查找DOM節(jié)點(diǎn)的方法
- js和jquery對dom節(jié)點(diǎn)的操作(創(chuàng)建/追加)
- JQuery替換DOM節(jié)點(diǎn)的方法
- JQuery包裹DOM節(jié)點(diǎn)的方法
- JQuery復(fù)制DOM節(jié)點(diǎn)的方法
- jquery對dom節(jié)點(diǎn)的操作【推薦】
- JQuery中DOM節(jié)點(diǎn)的操作與訪問方法實(shí)例分析
相關(guān)文章
JQuery實(shí)現(xiàn)簡單的復(fù)選框樹形結(jié)構(gòu)圖示例【附源碼下載】
這篇文章主要介紹了JQuery實(shí)現(xiàn)簡單的復(fù)選框樹形結(jié)構(gòu)圖,涉及jQuery頁面元素屬性動態(tài)操作與事件響應(yīng)相關(guān)操作技巧,并附帶源碼供讀者下載參考,需要的朋友可以參考下2019-07-07
JQuery中DOM節(jié)點(diǎn)的操作與訪問方法實(shí)例分析
這篇文章主要介紹了JQuery中DOM節(jié)點(diǎn)的操作與訪問方法,結(jié)合實(shí)例形式分析了jquery操作dom節(jié)點(diǎn)與訪問dom節(jié)點(diǎn)相關(guān)實(shí)現(xiàn)技巧及操作注意事項(xiàng),需要的朋友可以參考下2019-12-12
hover的用法及l(fā)ive的用法介紹(鼠標(biāo)懸停效果)
hover屬性在書寫css時(shí)大家都不會陌生了吧live主要用于對動態(tài)加載出來的元素綁定事件,下來將為大家詳細(xì)介紹下兩者的使用,感興趣的朋友可不要錯過了哈2013-03-03
為什么要在引入的css或者js文件后面加參數(shù)的詳細(xì)講解
為什么要在引入的css或者js文件后面加參數(shù)的詳細(xì)講解,需要的朋友可以參考一下2013-05-05
S2SH整合JQuery+Ajax實(shí)現(xiàn)登錄驗(yàn)證功能實(shí)現(xiàn)代碼
登錄驗(yàn)證,在項(xiàng)目開發(fā)中很常用的,尤其是這一塊非常有利于用戶體驗(yàn),感興趣的朋友可以參考下,或許對你學(xué)習(xí)登陸驗(yàn)證有所幫助,好了閑話不多說了,看代碼2013-01-01
jquery實(shí)現(xiàn)圖片燈箱明暗的遮罩效果
這篇文章主要介紹了jquery實(shí)現(xiàn)圖片燈箱明暗的遮罩效果,有需要的朋友可以參考一下2013-11-11
jquery實(shí)現(xiàn)文字單行橫移或翻轉(zhuǎn)(上下、左右跳轉(zhuǎn))
本文詳細(xì)介紹了jquery實(shí)現(xiàn)單行橫移或翻轉(zhuǎn)(上下、左右跳轉(zhuǎn))的方法。具有一定的參考價(jià)值,下面跟著小編一起來看下吧2017-01-01

