javascript - 从表单中删除节点?

标签 javascript forms for-loop dom nodes

我正在尝试从表单中删除(几乎)所有节点。我设法使用以下代码从表单中删除所有节点:

var form;
form = document.getElementById(id);
while (form.hasChildNodes())
    form.removeChild(form.lastChild);

但是,这还不够,因为我将添加一些逻辑来保留某些节点。因此,我需要使用 for loop 删除节点。我尝试使用以下代码:

var form, formNodes, totalNodes, i;
form = document.getElementById(id);
formNodes = form.childNodes;
totalNodes = formNodes.length;
for (i = 0; i < totalNodes; i++)
    form.removeChild(formNodes[i]);

一些节点被删除,但我收到此错误:

Uncaught TypeError: Failed to execute 'removeChild' on 'Node': parameter 1 is not of type 'Node'

考虑formNodes仅包含节点,可能导致错误的原因是什么?

编辑

我尝试使用以下代码向后循环:

var form, formNodes, totalNodes, i;
form = document.getElementById(id);
formNodes = form.childNodes;
totalNodes = formNodes.length;
for (i = totalNodes - 1; i >= 0; i--)
    form.removeChild(formNodes[i]);

它会删除所有节点。我将从 i 中减去一个偏移变量这样我就能够保留某些节点。

编辑

我的问题不同,因为我试图从表单中删除节点,而不是使用 getElementsByTagName获取段落元素。一个nodeelement 不同。我的问题的解决方案可能相似,但问题不一样。

最佳答案

当您删除子节点时,childNodes 属性会更新。

因此,一旦删除一半的子节点,您的索引将超过更新后的 NodeList 的末尾。

您应该向后循环(以便索引永远不会调整)或提前复制到数组。或者继续删除第一个子节点,直到 NodeList 为空。

关于javascript - 从表单中删除节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44527146/

相关文章:

javascript - Pdf.js : How to load file + view -- An error occurred while loading the PDF. 更多信息关闭(搜索 "normal"示例)

javascript - 使用我的 Django 模板的正确 Javascript 范围是什么?

forms - 有没有办法在 HTML5 中本地化输入类型 ="date"

javascript - jQuery 与 jQuery 移动积木表单提交

python - 防止pandas数据框标题行在for语句中重复

c - 如何使用 continue 语句将此 for 循环转换为 C 中的 while 循环

javascript - D3 map 投影不显示 map

javascript - 如何创建一个正则表达式来匹配最后一次出现的东西?

javascript - PreventDefault 的问题。提交表格

matlab删除矩阵计算中的for循环