方法简介:

  • empty()

This method removes not only child (and other descendant) elements, but also any text within the set of matched elements. This is because, according to the DOM specification, any string of text within an element is considered a child node of that element.

该方法不仅删除它的子节点,同时也删除该节点的文本域(根据DOM规范,节点的文本域也被认为是子节点)。

  • remove( [selector] )

    selectorA selector expression that filters the set of matched elements to be removed.

Similar to .empty(), the .remove() method takes elements out of the DOM. Use.remove() when you want to remove the element itself, as well as everything inside it. In addition to the elements themselves, all bound events and jQuery data associated with the elements are removed. To remove the elements without removing data and events, use.detach() instead.

和empty方法类似,remove方法也是从DOM里删除元素。当你想要删除节点本身和节点里的所有东西的时候,可以使用remove方法。除了节点本身以外,节点绑定的事件 和该节点相关的JQuery数据,也会被同时清除。当需要清除节点本身,但是不需要清除绑定的事件和数据的时候,可以使用detach方法。

  • detach( [selector] )

    selectorA selector expression that filters the set of matched elements to be removed.

The .detach() method is the same as .remove(), except that .detach() keeps all jQuery data associated with the removed elements. This method is useful when removed elements are to be reinserted into the DOM at a later time.

detach方法和remove方法很相似,但是它会保留所有JQuery相关的数据和绑定的事件。当你删除之后,想要在后来的某个时候重新加入时,这个方法将会很有用。

三者区别:

empty,remove,detach方法的区别

方法名称

元素本身(包含所有属性)

绑定事件和JQuery相关数据

文本域及子节点

empty()

不删除

不删除

删除

remove()

删除

删除

删除

detach()

删除

不删除

删除

示例验证:

验证环境: JQuery-1.8.0.min.js, Firefox 11.0, Firebug1.9.2;

1、验证是否删除元素本书(包含所有属性)、文本域及子节点

代码如下:

[html] view plaincopyprint?
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  5. <title>Test Jquery remove detach empty</title>
  6. <style>p { background:yellow; margin:6px 0; } p.off { background: black; }</style>
  7. <script src="js/jquery-1.8.0.min.js"></script>
  8. <script>
  9. $(document).ready(function(){
  10. $("p").click(function(){
  11. $(this).toggleClass("off");
  12. });
  13. var p;
  14. $("#button").click(function(){
  15. if ( p ) {
  16. p.appendTo("body");
  17. p = null;
  18. } else {
  19. p = $("p").detach();
  20. // p = $("p").remove();
  21. // p = $("p").empty();
  22. }
  23. });
  24. });
  25. </script>
  26. </head>
  27. <body>
  28. <p id="A">Hello <span>subNode</span></p>
  29. how are
  30. <p id="B">you? <span>subNode</span></p>
  31. <input type="button" id="button" value="Attach/detach paragraphs" />
  32. </body>
  33. </html>
 

detach() 方法:

执行之前的HTML DOM结构如图:

执行删除之后的 HTML DOM结构如图:

观察可知使用detach方法,删掉了元素<p>本身即它的所有属性(id 等), 文本域及其子节点<span>subNode</span>.

其他方法,类似可以验证,这里就不赘述。

2、验证绑定的事件和JQuery相关数据

这里需要说明的是: 绑定事件,指的是JQuery动态绑定的事件,不是通过元素的属性指定的事件。(下面会举例说明)

JQuery 相关数据,不太懂指的什么,没有找到相关示例,希望有识之士不吝赐教。

下面的示例仅针对绑定事件,便于大家理解:

[html] view plaincopyprint?
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  5. <title>Test Jquery remove detach empty</title>
  6. <style>
  7. p {
  8. background:yellow;
  9. margin:6px 0;
  10. }
  11. p.off {
  12. background: black;
  13. }
  14. </style>
  15. <script src="js/jquery-1.8.0.min.js"></script>
  16. <script>
  17. $(document).ready(function(){
  18. // JQuery 为P标签动态绑定click事件
  19. $("p").click(function(){
  20. $(this).toggleClass("off");
  21. });
  22. var p;
  23. $("#button").click(function(){
  24. if ( p ) {
  25. p.appendTo("body");
  26. p = null;
  27. } else {
  28. p = $("p").detach();
  29. // p = $("p").remove();
  30. // p = $("p").empty();
  31. }
  32. });
  33. });
  34. </script>
  35. </head>
  36. <body>
  37. <p id="A">Hello <span>subNode</span></p>
  38. how are
  39. <p id="B">you? <span>subNode</span></p>
  40. <input type="button" id="button" value="Attach/detach paragraphs" />
  41. </body>
  42. </html>
 

运行该页面,点击按钮,删除;  再次点击按钮,删除的<p>标签,重新加入到body的底部,这里我们重点验证的是,重新加入后的绑定事件click是否有效【这里的click事件为,点击P标签,class在黄色和黑色之间切换】。

1)  验证detach方法

可以看到执行detach方法,重新添加之后,JQuery动态绑定的click事件,toggleClass生效,说明之前删除的时候没有把动态绑定的事件删除。

2)  验证remove方法

修改程序中以下部分:

[javascript] view plaincopyprint?
  1. // p = $("p").detach();
  2. p = $("p").remove();
  // p = $("p").detach();p = $("p").remove();

测试remove函数,同样是先删除在加入,执行完后的效果:

可以发现调用remove方法之后,再重新把删除的标签加入到body后时,发现JQuery动态绑定的事件,已经失效,点击P标签,class不能切换。说明在执行remove的时候,已经把JQuery动态绑定的事件删除了。

3)  验证empty方法:

要验证empty方法,要麻烦一点,在删除之后,重新加入之后,text为空,不能够点击测试click事件,因此我们需要新增一个按钮,为这种情况增加text,便于测试click事件。

代码如下:

[html] view plaincopyprint?
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  5. <title>Test Jquery remove detach empty</title>
  6. <style>
  7. p {
  8. background:yellow;
  9. margin:6px 0;
  10. }
  11. p.off {
  12. background: black;
  13. }
  14. </style>
  15. <script src="js/jquery-1.8.0.min.js"></script>
  16. <script>
  17. $(document).ready(function(){
  18. // JQuery 为P标签动态绑定click事件
  19. $("p").click(function(){
  20. $(this).toggleClass("off");
  21. });
  22. var p;
  23. $("#button").click(function(){
  24. if ( p ) {
  25. p.appendTo("body");
  26. p = null;
  27. } else {
  28. // p = $("p").detach();
  29. // p = $("p").remove();
  30. p = $("p").empty();
  31. }
  32. });
  33. // 为删除之后重新加入的p标签加入text
  34. $("#buttonA").click(function(){
  35. $("#A").text("Hello");
  36. $("#B").text("you?");
  37. });
  38. });
  39. </script>
  40. </head>
  41. <body>
  42. <p id="A">Hello <span>subNode</span></p>
  43. how are
  44. <p id="B">you? <span>subNode</span></p>
  45. <input type="button" id="button" value="Attach/detach paragraphs" /> <br/>
  46. <input type="button" id="buttonA" value="addTextA" /> <br/>
  47. </body>
  48. </html>
 

执行效果如图:

可以发现empty方法,没有删除动态绑定事件。

4)  补充讲解:

为了更好的理解这里所说的绑定事件是JQuery的动态绑定事件,我们修改一下程序,使用onclick属性,把click事件作为一个属性值,来静态绑定。

修改后的程序如下:

[html] view plaincopyprint?
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  5. <title>Test Jquery remove detach empty</title>
  6. <style>
  7. p {
  8. background:yellow;
  9. margin:6px 0;
  10. }
  11. p.off {
  12. background: black;
  13. }
  14. </style>
  15. <script src="js/jquery-1.8.0.min.js"></script>
  16. <script>
  17. // 处理P标签click事件
  18. function clickHandler(element){
  19. $(element).toggleClass("off");
  20. }
  21. $(document).ready(function(){
  22. var p;
  23. $("#button").click(function(){
  24. if ( p ) {
  25. p.appendTo("body");
  26. p = null;
  27. } else {
  28. // p = $("p").detach();
  29. p = $("p").remove();
  30. // p = $("p").empty();
  31. }
  32. });
  33. });
  34. </script>
  35. </head>
  36. <body>
  37. <p id="A" οnclick="clickHandler(this)">Hello <span>subNode</span></p>
  38. how are
  39. <p id="B" οnclick="clickHandler(this)">you? <span>subNode</span></p>
  40. <input type="button" id="button" value="Attach/detach paragraphs" /> <br/>
  41. </body>
  42. </html>
 

我们再次使用remove方法,删除然后在append,发现事件响应有效了。其实这里的click事件已经作为一个静态的p元素的一个属性onclick的值了。所有append之后是有效的。

综上所述,可以得到这个三个方法的上述比较表格了。

【转载】http://blog.csdn.net/walkerjong/article/details/7989405

转载于:https://www.cnblogs.com/julin-peng/p/4210596.html

Jquery empty() remove() detach() 方法的区别相关推荐

  1. jquery attr()和prop()方法的区别

    $('').attr()返回的是html对象 $('').prop()返回的是DOM对象 attr(): attr() 方法设置或返回被选元素的属性和值. 当该方法用于返回属性值,则返回第一个匹配元素 ...

  2. jQuery find 和 filter 方法的区别

    源代码: <!DOCTYPE html> <html> <head></script> </head> <body class=&qu ...

  3. jQuery删除元素的三中方法的区别:detach()、remove()、empty()

    detach() 移除被选元素,包括所有文本和子节点. 该方法会保留移除元素的副本,允许它们在以后被重新插入.(这个方法会保留 jQuery 对象中的匹配的元素,因而可以在将来再使用这些匹配的元素.d ...

  4. jQuery删除元素方法remove(),detach(),empty()

    1.empty() 它是清空节点,但是那些节点的标签还在. 结果是:p里面的都被删除了,而不是只有 class为hello的p 2.remove()  从DOM中删除所有匹配的元素. 这个方法不会把匹 ...

  5. jQuery基础:remove()与 detach()区别

    1.detach() detach() 方法移除被选元素,包括所有文本和子节点. 这个方法会保留 jQuery 对象中的匹配的元素,因而可以在将来再使用这些匹配的元素. detach() 会保留所有绑 ...

  6. jQuery remove()与jQuery empty()的区别

    jQuery remove() 方法删除被选元素及其子元素.举例如下: 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <scri ...

  7. jquery 删除html属性值,使用jQuery的remove()和empty()方法删除Html元素及子元素和内容...

    01第1节. jQuery删除元素和内容 #JavaScript#在jQuery中,不仅可以在已有Html页面中添加新的Html元素,还可以删除已有的Html元素. 在jQuery中有2个方法可以完成 ...

  8. jquery中remove()方法移除被选元素,包括所有的文本和子节点

    jquery中remove方法移除被选元素,包括所有的文本和子节点 定义和用法 移除所有的 元素 移除html中指定id的元素内容 定义和用法 remove() 方法移除被选元素,包括所有的文本和子节 ...

  9. jQuery 核心 - noConflict() 方法,jQuery 文档操作 - detach() 方法

    为什么80%的码农都做不了架构师?>>>    原文地址:http://www.w3school.com.cn/jquery/manipulation_detach.asp 实例 使 ...

最新文章

  1. C语言解析pcap文件得到HTTP信息实例(原创,附源码)
  2. 从“创业输家”到“创智赢家”
  3. linux怎么关闭iptables linux如何关闭防火墙
  4. jquery 选择器大全的详细说明和实例
  5. 2019牛客暑期多校训练营(第七场)J A+B problem
  6. python怎么运行_程序员大牛讲解,Python程序的执行原理
  7. 【高校宿舍管理系统】第四章 创建前端项目以及完成登录页面
  8. Linux:Vim的安装与配置
  9. steam授权_听歌、看番、学习甚至开车...steam好像忘了自己是个游戏平台
  10. RPM打包技术与典型SPEC文件分析(转)
  11. 能源消耗总量计算公式_七、能源统计(21)
  12. plc输入/输出模块的选择
  13. 最新免费纯净版PE制作工具V2.1【更新说明】
  14. python中3个单引号,Pyhton3中单引号、双引号、三个引号的用法和区别
  15. Getting Real ——把握现实
  16. opencv_dnn模型部署学习记录
  17. Devexpress PdfViewer预览pdf,禁止下载,打印,复制
  18. 比较const ,readonly, stitac readonly
  19. 文字转语音离线html,web端文字转语音的几种方案
  20. 微信公众账号与网站信息对接

热门文章

  1. 全球32家人工智能独角兽公司
  2. 多模态AI崛起,2022年人工智能5大发展趋势
  3. 眼耳鼻舌身意,严肃地聊一聊元宇宙的“技术拼图”
  4. 国产光刻设备第一股:从官司缠身到国产希望?
  5. 这一年,宇宙“面目”愈发清晰
  6. 灵魂出窍的神经生物学基础!
  7. 中国10大最震撼的无人工厂,你吃的用的都是这么来的!
  8. 李飞飞高徒:斯坦福如何打造基于视觉的智能医院?
  9. 网传 10 年技术岗老员工身患绝症,1780 元被知名游戏公司裁掉?公司回应:已达成和解
  10. 当所有人都向往大厂时,这些 00 后程序员却选择逃离