JavaScript removeChild 方法详解与遍历注意事项

作者:交互手记

时间:2026-10-30

浏览:190

本文深入解析JavaScript中removeChild方法的机制。重点说明节点删除后仍驻留内存可复用,并警示在遍历父节点子节点时,children属性会随删除操作实时更新,直接遍历易引发逻辑错误。通过具体代码示例展示正确删除及遍历过滤子节点的方法,帮助开发者避免常见DOM操作陷阱。

文章目录

removeChild 方法概述与内存机制

1. 概述

执行删除操作后,该节点虽然不再存在于文档树结构中,但它依然保留在内存中,开发者可以随时将其重新添加到页面的其他位置。

在遍历父节点的子节点并执行删除操作时,必须注意children属性是只读的,且该属性会实时反映子节点的变化。这意味着如果在遍历过程中直接删除子节点,迭代器的索引可能会因列表长度动态缩短而指向错误位置,导致漏删或越界。


// 拿到待删除节点:
var self = document.getElementById('to-be-removed');
// 拿到父节点:
var parent = self.parentElement;
// 删除:
var removed = parent.removeChild(self);
removed === self; // true

代码示例与遍历陷阱

2. example


<!DOCTYPE html>
<html>
<head>
</script>
</head>
<body>
<ul id="test-list">
  <li>JavaScript</li>
  <li>Swift</li>
  <li>HTML</li>
  <li>ANSI C</li>
  <li>CSS</li>
  <li>DirectX</li>
</ul>
<script>
var p= document.getElementById('test-list');
var length = p.children.length;
var i=0;
for(; i<length; ){
  var li = p.children[i];
  var text = li.innerText;
  if(text!=='JavaScript' && text!=='HTML' && text!=='CSS'){

    p.removeChild(li);
    alert(p.children.toString());
    length--;
  }else{
    i++;
  }
}
// 测试:
;(function () {
  var
    arr, i,
    t = document.getElementById('test-list');
  if (t && t.children && t.children.length === 3) {
    arr = [];
    for (i = 0; i < t.children.length; i ++) {
      arr.push(t.children[i].innerText);
    }
    if (arr.toString() === ['JavaScript', 'HTML', 'CSS'].toString()) {
      alert('测试通过!');
    }
    else {
      alert('测试失败: ' + arr.toString());
    }
  }
  else {
    alert('测试失败!');
  }
})();
</script>
</body>
</html>

以上这篇js removeChild 方法深入理解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持本站。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章