javascript - 与 child 一起最安全、最高效地去除元件

标签 javascript dom

假设以下标记:

<div id="outterParent">
    <div id="innerParent">
        <div class="children"></div>
        <div class="children"></div>
        <div class="children"></div>
    </div>
</div>

就安全性(避免内存泄漏)和性能而言,这样做可以吗:

var outterParent = document.getElementById("outterParent");
var innerParent = document.getElementById("innerParent");

outterParent.removeChild(innerParent);

outterParent = innerParent = null;

...或者最好在删除 #innerParent 之前删除每个 .children 元素,如下所示:

var outterParent = document.getElementById("outterParent");
var innerParent = document.getElementById("innerParent");
var child;

while (innerParent.firstChild){
    child = innerParent.firstChild;

    innerParent.removeChild(child);
}

outterParent.removeChild(innerParent);

outterParent = innerParent = child = null;

最佳答案

这要看情况。如果您在某处引用了子级,并且不将其删除,则无法对父级进行垃圾收集。

var child = document.querySelector('children');
document.getElementById("innerParent").remove();
child.parentNode; // #innerParent -> it can't be garbage collected

那么最好取消子引用,或者删除子引用:

var child = document.querySelector('children');
document.getElementById("innerParent").remove();
child.remove();
child.parentNode; // null -> #innerParent might be garbage collected

关于javascript - 与 child 一起最安全、最高效地去除元件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37094382/

相关文章:

javascript - qTip(jQuery 插件)如何删除页面中的所有 q 提示?

javascript - 如何将 JavaScript 变量传递给 Rails 实例变量?

javascript - jQuery PageSlide : . 点击时的 css 函数

java.lang.OutOfMemoryError 与 DOM

javascript - 如何使用 javascript 从动态创建的 html 元素获取输入数据

javascript - 这个解决方案是否正确处理 DOM 内存泄漏

javascript - 用于输入中文(ibus)的 JQuery/DOM 事件?

javascript - 为什么 url 查询字符串不传递变量值?

javascript - 仅在 IE 上,表单 DOM id 返回 "is null or not an object"问题

javascript - 移动网络应用程序上的 keyup 似乎仍然没有覆盖内容 block