-5

我无法区分 jquery remove() 和 detach() 方法,因为它们的作用相同或工作相同,请考虑代码:

 <script>
$(document).ready(function(){
$("#btn1").click(function(){
  $("body").append($("#p1").detach());
    });
  $("#btn2").click(function(){
  $("body").append($("#p2").remove());
    });
 $("p").click(function(){
    $(this).animate({fontSize:"+=1px"})
  });
});
</script>
4

4 回答 4

1

文档

.detach() 方法与 .remove() 方法相同,不同之处在于 .detach() 保留与已删除元素关联的所有 jQuery 数据。当移除的元素稍后要重新插入到 DOM 中时,此方法很有用。

remove()完全破坏元素。detach()删除元素,保持其数据完整。

于 2013-02-06T17:36:46.760 回答
0

detach方法不会删除与元素关联的内部 jQuery 数据(例如事件绑定),因此只有存在任何此类数据时,您才会看到任何差异。

要将文档中的元素从一个位置移动到另一个位置,您不必将其移除或分离,只需将其附加到新位置即可:

$("body").append($("#p1"));
于 2013-02-06T17:38:21.930 回答
0

您不会看到两者之间的明显差异。这段摘录取自 jQuery 文档:

.detach() 方法与 .remove() 方法相同,不同之处在于 .detach() 保留与已删除元素关联的所有 jQuery 数据。当移除的元素稍后要重新插入到 DOM 中时,此方法很有用。

请查看每个调用的 API 文档:

jQuery 删除

jQuery 分离

于 2013-02-06T17:38:53.313 回答
0

正如文档所解释的,$.detach()保留关联的 jQuery 数据,同时$.remove()删除该数据。此数据包含绑定事件、动画队列以及您手动添加的任何内容$.data()

您的原始示例中,您应该能够注意到以下场景中的差异:

  1. 单击段落。
  2. 单击按钮。
  3. 再次单击该段落。

对于#p1#btn1,第二次单击该段落仍将触发单击处理程序并增加字体大小。这是因为事件处理程序存储在数据中并由detach(). 因此,当将它重新附加到 DOM 时,处理程序仍然是绑定的。

#p2但是,#btn2事件处理程序被删除,并且remove()第二次单击该段落不会做任何事情。

detach()旁注:当您立即再次将其附加到 DOM 时,您不需要调用。detach()如果您想将元素存储在变量中一段时间​​,直到需要重新附加它(使用相同的数据和行为),这可能会很有趣。remove()通常用于销毁一个元素,同时清理任何关联的数据。

于 2013-02-06T17:48:16.010 回答