jQuery empty()和remove()的区别

103
< p >在jQuery中,empty()remove()方法有什么区别?当我们调用这些方法之一时,创建的对象将被销毁并释放内存。

3个回答

164
  • empty()会清空选定元素的内容,但保留该选定元素本身。
  • remove()会清空选定元素的内容并且删除该选定元素本身。

考虑:

<div>
    <p><strong>foo</strong></p>
</div>

$('p').empty();  // --> "<div><p></p></div>"

// whereas,
$('p').remove(); // --> "<div></div>"

这两种方法都会删除DOM对象并释放它们占用的内存。


以下是文档链接,其中包含示例:


1
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Killroy
1
太晚了,但他们也删除了处理程序。有可能您已经使用像livedelegate这样的函数注册了这些处理程序。 - undone

56

文档有很好的解释,并且还包含示例:

之前:

<div class="container">
  <div class="hello">Hello</div>
  <div class="goodbye">Goodbye</div>
</div>

.remove():

$('.hello').remove();

之后:

<div class="container">
  <div class="goodbye">Goodbye</div>
</div>
抱歉,我只能用英语进行交流和回答问题。
<div class="container">
  <div class="hello">Hello</div>
  <div class="goodbye">Goodbye</div>
</div>

.empty():

$('.hello').empty();

后面:

<div class="container">
  <div class="hello"></div>
  <div class="goodbye">Goodbye</div>
</div>

就内存而言,一旦从DOM中删除了一个元素,并且没有其他引用它,垃圾回收器在运行时将会回收该内存。


返回翻译后的文本:empty不会影响选择器的属性。如果您想删除选择器元素的属性,我注意到jQuery的removeAttr和removeClass在Firefox中存在错误。所以我选择使用remove方法,然后再添加容器元素,最后将子节点附加到相同的容器元素中。 - randominstanceOfLivingThing
完美的总结,这解释得非常好!对我来说,甚至比被接受的答案还要好。 - JonSnow

2

$("body").empty() -- 这个命令会移除 body 标签内的 HTML DOM 元素。

当你使用 $("body").remove() 命令时,它会连同 body 标签一起移除整个 HTML DOM。


17
这个答案提供了哪些现有的回答缺失的内容?这些回答已经存在三年了。 - jcsanyi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接