javascript - removeChild 真的会删除元素吗?

标签 javascript html dom removechild

removeChild 函数真的完全删除了子节点吗?或者它只是删除作为指定父节点子节点的元素?如果真的不删除元素,有没有办法彻底删除元素?

最佳答案

removeChild 方法只是将它从其父对象中移除。如果它是页面的可见元素,它将从页面中删除。

但是 Javascript 有垃圾回收机制。这意味着只要有任何变量引用它,节点对象本身就会一直存在。因此,您可以将一个节点分配给一个变量,使用 removeChild 从其父节点“trim ”它,然后将其插入或附加到其他节点,从而有效地在页面上移动它.

以下代码将删除一个节点,并等待 10 秒,然后再将其重新添加到树中(从而添加到页面中):

var oldNode = someNode.removeChild(...);
setTimeout(function () {
  document.documentElement.appendChild(oldNode);
}, 10000);

这意味着节点对象还没有从内存中删除,因为还有一个变量指向它(即oldNode)。

另一种情况:

var node = document.getElementById('test');
// ... do stuff
node.parentElement.removeChild(node);
// 'node' still exists, but has been removed from the page
// ... do some more stuff
node = document.getElementById('hello');
// The variable 'node' now points to something else; 
//  this means the original node will be deleted from memory

另一方面,如果您将删除的节点重新分配给另一个变量,则无法再访问它(不能通过文档树访问,因为它已从那里删除;而不是通过 JS 变量);所以 Javascript 会自动将它从内存中清除:

someNode.removeChild(...);

将删除的节点分配给一个变量,然后将 null(或其他任何东西)分配给该变量——就像 Marc B 在他的回答中建议的那样——是完全没有必要的,恕我直言,这很愚蠢。

关于javascript - removeChild 真的会删除元素吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5194924/

相关文章:

html - 响应式导航栏 - 复选框不触发(html,css)

javascript - $document.ready 和 $rootScope.$on ('$viewContentLoaded' 之间有什么区别)?

javascript - 耗时的 DOM 绘制

javascript - 如何使用 Aurelia.io 增强服务器端生成的页面?

javascript - Momentjs如何获取下个月的最后日期

javascript - <Select> 带有无限滚动下拉菜单的小部件

html - 添加额外的 8px 到边距

java - 使用 DOM 解析时如何识别 xml 结束标记?

javascript - 如何换行填充 DIV(就像在 MS-Excel 中一样)

javascript - 如何让 Next/Prev 链接留在 CarouFredSel 幻灯片的两侧