4-4 DOM节点删除之保留数据的删除操作detach()
本节编程练习不计算学习进度,请电脑登录imooc.com操作

DOM节点删除之保留数据的删除操作detach()

如果我们希望临时删除页面上的节点,但是又不希望节点上的数据与事件丢失,并且能在下一个时间段让这个删除的节点显示到页面,这时候就可以使用detach方法来处理

detach从字面上就很容易理解。让一个web元素托管。即从当前页面中移除该元素,但保留这个元素的内存模型对象。

来看看jquery官方文档的解释:

这个方法不会把匹配的元素从jQuery对象中删除,因而可以在将来再使用这些匹配的元素。与remove()不同的是,所有绑定的事件、附加的数据等都会保留下来。
$("div").detach()这一句会移除对象,仅仅是显示效果没有了。但是内存中还是存在的。当你append之后,又重新回到了文档流中。就又显示出来了。

当然这里要特别注意,detach方法是JQuery特有的,所以它只能处理通过JQuery的方法绑定的事件或者数据

参考右边的代码区域,通过 $("p").detach()把所有的P元素删除后,再通过append把删除的p元素放到页面上,通过点击文字,可以证明事件没有丢失

任务

  1. <html>
  2.  
  3. <head>
  4. <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
  5. <script src="https://www.imooc.com/static/lib/jquery/1.9.1/jquery.js"></script>
  6. <style type="text/css">
  7. p {
  8. color: red;
  9. }
  10. </style>
  11. </head>
  12.  
  13. <body>
  14. <p>P元素1,默认给绑定一个点击事件</p>
  15. <p>P元素2,默认给绑定一个点击事件</p>
  16. <button id="bt1">点击删除 p 元素</button>
  17. <button id="bt2">点击移动 p 元素</button>
  18. <script type="text/javascript">
  19. $('p').click(function(e) {
  20. alert(e.target.innerHTML)
  21. })
  22. var p;
  23. $("#bt1").click(function() {
  24. if (!$("p").length) return; //去重
  25. //通过detach方法删除元素
  26. //只是页面不可见,但是这个节点还是保存在内存中
  27. //数据与事件都不会丢失
  28. p = $("p").detach()
  29. });
  30.  
  31. $("#bt2").click(function() {
  32. //把p元素在添加到页面中
  33. //事件还是存在
  34. $("body").append(p);
  35. });
  36. </script>
  37. </body>
  38.  
  39. </html>
  40.  
下一节