javascript - 无法删除所有子节点

标签 javascript

我想从它们的父节点中删除所有带有 class="child" 的子节点,但只删除奇数序列。如何在原生 javascript 中删除所有带有 class="child" 的元素,为什么只删除奇数序列?

var child = document.getElementsByClassName("child");

function remove(){
  for (var i=0; i<child.length; i++) {
    child[i].parentNode.removeChild(child[i]);
  }
}
document.getElementById("del").onclick = remove;
<div>
  <div class="child">
    Child 1
  </div>
  <div class="child">
    Child 2
  </div>
  <div class="child">
    Child 3
  </div>
  <div class="child">
    Child 4
  </div>
</div>

<br/>

<div>
  <div class="child">
    Child 5
  </div>
  <div class="child">
    Child 6
  </div>
</div>

<button id="del">Remove Child</button>

最佳答案

getElementsByClassName() 返回一个 NodeList,它是一个类似数组的对象,可呈现结果的实时 View 。

当您从这些元素中删除类时,这些元素也会从 NodeList 中删除。

当您从 child[0] 中删除该类时,child 会收缩,并且 child[0] 成为下一个元素。

有很多方法可以解决这个问题:

  • 将 NodeList 复制到一个数组,这样它就不会在您下面发生变化(例如,child = Array.prototype.slice.call(child))

    <
  • 向后循环,这样您就不会受到索引变化的影响

  • 始终从 child[0] 中删除该类,直到 NodeList 为空。

关于javascript - 无法删除所有子节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26327368/

相关文章:

javascript - 如何切换密码

javascript - 如何使用 Javascript 在 HTML 页面中将 XML 显示为可折叠和可展开的树?

javascript - 通过 ajax 将数组从 PHP 移动到具有有效 JSON 格式的 JS

javascript - Kendo Grid 通过 js 传递附加数据以读取服务器绑定(bind)中的操作

javascript - 通过在 child 中调用函数的 react 孙子

javascript - 推送 readline 数据后数组为空

javascript - 如何在三个js中设置轨道控制的工作范围

javascript - 帮助 JQuery 回调

javascript - 不同大小的 div 左上对齐

javascript - 正则表达式 - 右/左 trim + 将中间多于一个的空格减少到一个 + 删除开头和结尾处的换行符,包括如果在中间且 >2 则减少到两个