【问题标题】:jQuery empty() vs remove()jQuery empty() 与 remove()
【发布时间】:2011-03-06 15:53:04
【问题描述】:

jQuery中的empty()remove()方法有什么区别,当我们调用这些方法中的任何一个时,正在创建的对象都会被销毁并释放内存?

【问题讨论】:

    标签: javascript jquery dom-manipulation


    【解决方案1】:

    文档解释得很好。它还包含示例:

    之前:

    <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 方法并再次添加容器元素,然后将子节点附加到相同的元素。
    • 完美的总结,这解释得很好!对我来说甚至比公认的答案更好。
    【解决方案2】:
    • empty() 将清空其内容的选择,但保留选择本身。
    • remove() 将清空其内容的选择删除选择本身。

    考虑:

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

    它们都删除了 DOM 对象,应该释放它们占用的内存,是的。


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

    【讨论】:

    • 事件处理程序呢?我有一个奇怪的情况,空+追加两次,不同的追加导致第二组附加项执行第一组的处理程序。
    • @way 为时已晚,但他们也删除了处理程序。您有可能将这些处理程序注册到 livedelegate 之类的函数中。
    【解决方案3】:

    $("body").empty() -- 它'删除了 body 标签内的 HTML DOM 元素 --

    当您声明 $("body").remove() - 它会删除整个 HTML DOM 以及 body TAG。

    【讨论】:

    • 这个答案提供了哪些已经存在三年的现有答案中缺少的内容?
    猜你喜欢
    • 2015-10-03
    • 1970-01-01
    • 2022-12-27
    • 2015-07-07
    • 2015-02-05
    • 2013-07-06
    • 1970-01-01
    • 2022-12-01
    • 1970-01-01
    相关资源
    最近更新 更多