如何在jQuery中刪除DOM節點?相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
一、empty
empty 顧名思義,清空方法,但是與刪除又有點不一樣,因為它只移除了 指定元素中的所有子節點。
這個方法不僅移除子元素(和其他后代元素),同樣移除元素里的文本。因為,根據說明,元素里任何文本字符串都被看做是該元素的子節點。如果我們通過empty方法移除里面div的所有元素,它只是清空內部的html代碼,但是標記仍然留在DOM中,通過empty移除了當前div元素下的所有p元素 但是本身id=test的div元素沒有被刪除。
$("button").on('click', function() {
//通過empty移除了當前div元素下的所有p元素
//但是本身id=test的div元素沒有被刪除
$("#test").empty()
})二、remove
remove與empty一樣,都是移除元素的方法,但是remove會將元素自身移除,同時也會移除元素內部的一切,包括綁定的事件及與該元素相關的jQuery數據。
例如一段節點,綁定點擊事件,如果不通過remove方法刪除這個節點其實也很簡單,但是同時需要把事件給銷毀掉,這里是為了防止"內存泄漏",所以前端開發者一定要注意,綁了多少事件,不用的時候一定要記得銷毀。通過remove方法移除div及其內部所有元素,remove內部會自動操作事件銷毀方法,所以使用使用起來非常簡單
remove表達式參數:
remove比empty好用的地方就是可以傳遞一個選擇器表達式用來過濾將被移除的匹配元素集合,可以選擇性的刪除指定的節點,我們可以通過$()選擇一組相同的元素,然后通過remove()傳遞篩選的規則,如:$("p").filter(":contains('3')").remove()。
<body>
<style>
.test1 {
background: #bbffaa;
}
.test2 {
background: yellow;
}
</style>
<h3>通過jQuery remove方法移除元素</h3>
<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>點擊通過jQuery的empty移除元素</button>
<button>點擊通過jQuery的empty移除指定元素</button>
<script type="text/javascript">
$("button:first").on('click', function() {
//刪除整個 class=test1的div節點
$(".test1").remove()
})
$("button:last").on('click', function() {
//找到所有p元素中,包含了3的元素
//這個也是一個過濾器的處理
$("p").remove(":contains('3')")
})
</script>
</body>empty和remove區別
用到移除指定元素的時候,jQuery提供了empty()與remove([expr])二個方法,兩個都是刪除元素,但是兩者還是有區別
empty方法
嚴格地講,empty()方法并不是刪除節點,而是清空節點,它能清空元素中的所有后代節點
empty不能刪除自己本身這個節點
remove方法
該節點與該節點所包含的所有后代節點將同時被刪除
提供傳遞一個篩選的表達式,用來指定刪除選中合集中的元素
三、detach
如果我們希望臨時刪除頁面上的節點,但是又不希望節點上的數據與事件丟失,并且能在下一個時間段讓這個刪除的節點顯示到頁面,這時候就可以使用detach方法來處理detach從字面上就很容易理解。讓一個web元素托管。即從當前頁面中移除該元素,但保留這個元素的內存模型對象。
官方解釋:這個方法不會把匹配的元素從jQuery對象中刪除,因而可以在將來再使用這些匹配的元素。與remove()不同的是,所有綁定的事件、附加的數據等都會保留下來。 $("div").detach()這一句會移除對象,僅僅是顯示效果沒有了。但是內存中還是存在的。當你append之后,又重新回到了文檔流中。就又顯示出來了。
當然這里要特別注意,detach方法是JQuery特有的,所以它只能處理通過JQuery的方法綁定的事件或者數據
通過 $("p").detach()把所有的P元素元素刪除后,在通過append把刪除的p放到頁面上,可以通過點擊文字測試,事件沒有丟失
<body>
<p>P元素1,默認給綁定一個點擊事件</p>
<p>P元素2,默認給綁定一個點擊事件</p>
<button id="bt1">點擊刪除 p 元素</button>
<button id="bt2">點擊移動 p 元素</button>
<script type="text/javascript">
$('p').click(function(e) {
alert(e.target.innerHTML)
})
var p;
$("#bt1").click(function() {
if (!$("p").length) return; //去重
//通過detach方法刪除元素
//只是頁面不可見,但是這個節點還是保存在內存中
//數據與事件都不會丟失
p = $("p").detach()
});
$("#bt2").click(function() {
//把p元素在添加到頁面中
//事件還是存在
$("body").append(p);
});
</script>
</body>detach()和remove()區別
JQuery是一個很大強的工具庫,在工作中開發中,可是有些方法還是因為不常用到,或是沒有注意到而被我們而忽略。remove()和detach()可能就是其中的一個,可能remove()我們用得比較多,而detach()就可能會很少了
通過一張對比表來解釋2個方法之間的不同
| 方法名 | 參數 | 事件及數據是否也被移除 | 元素自身是否被移除 |
| remove | 支持選擇器表達 | 是 | 是(無參數時),有參數時要根據參數所涉及的范圍 |
| detach | 參數同remove | 否 | 情況同remove |
remove:移除節點
無參數,移除自身整個節點以及該節點的內部的所有節點,包括節點上事件與數據
有參數,移除篩選出的節點以及該節點的內部的所有節點,包括節點上事件與數據
detach:移除節點
移除的處理與remove一致
與remove()不同的是,所有綁定的事件、附加的數據等都會保留下來
例如:$("p").detach()這一句會移除對象,僅僅是顯示效果沒有了。但是內存中還是存在的。當你append之后,又重新回到了文檔流中。就又顯示出來了。
看完上述內容,你們掌握如何在jQuery中刪除DOM節點的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。