DOM節點的刪除
阿新 • • 發佈:2020-07-06
empty()
移除指定元素中的所有子節點。
<div id="test">
<p>p元素1</p>
<p>p元素2</p>
</div>
$("#test").empty()
通過empty移除了當前div元素下的所有p元素,但是本身id=test的div元素沒有被刪除。
remove()有參與無參
remove會將元素自身移除,同時也會移除元素內部的一切,包括繫結的事件及與該元素相關的jQuery資料。
remove可以傳遞一個選擇器表示式用來過濾將被移除的匹配元素集合,可以選擇性的刪除指定的節點。
<div class="test2">
<p>p元素3</p>
<p>p元素4</p>
</div>
$("p").remove(":contains('3')")
找到所有p元素中,包含了3的元素。如果要刪除整個test2節點,用$("test2").remove()即可。
detach
從當前頁面中移除該元素,但保留這個元素的記憶體模型物件。$("div").detach()這一句會移除物件,僅僅是顯示效果沒有了。但是記憶體中還是存在的。當你append之後,又重新回到了文件流中。
<script type="text/javascript"> var p; $("#bt1").click(function() { if (!$("p").length) return; p = $("p").detach() }); $("#bt2").click(function() { $("body").append(p); }); </script>
通過 $("p").detach()把所有的P元素刪除後,再通過append把刪除的p元素放到頁面上。if語句用於消除重複,不然兩次點選#bt1則會重複給p賦值,bt2也加不回來了。
detach與remove的區別
detach與remove()不同的是,所有繫結的事件、附加的資料等都會保留下來。
<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').text('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>
remove後的$("body").append(p),點選沒有事件,而detach後append點選有原來的事件。