jQuery DOM 操作之detach()
如果我們希望暫時刪除頁面上的節點,但是又不希望節點上的資料與事件遺失,並且能在下一個時間段讓這個刪除的節點顯示到頁面,這時候就可以使用detach方法來處理
detach從字面上就很容易理解。讓一個web元素託管。即從目前頁面中移除該元素,但保留這個元素的記憶體模型物件。
來看看jquery官方文件的解釋:
這個方法不會把符合的元素從jQuery物件中刪除,因而可以在將來再使用這些符合的元素。與remove()不同的是,所有綁定的事件、附加的資料等都會保留下來。
$("div").detach()這一句會移除對象,只是顯示效果沒有了。但是記憶體中還是存在的。當你append之後,又重新回到了文件流程。就又顯示出來了。
當然這裡要特別注意,detach方法是JQuery特有的,所以它只能處理透過JQuery的方法綁定的事件或資料
參考右邊的程式碼區域,透過$("p").detach()把所有的P元素刪除後,再透過append把刪除的p元素放到頁面上,透過點擊文字,可以證明事件沒有遺失
#下面我們來看實例程式碼:
<html> <head> <meta http-equiv="Content-type" content="text/html; charset=utf-8" /> <script src="http://lib.sinaapp.com/js/jquery/1.9.1/jquery-1.9.1.min.js"></script> <style type="text/css"> p { color: red; } </style> </head> <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> </html>