javascript - DOMParser parseFromString 仅在迭代结果主体 childNodes 时删除 Node

标签 javascript html node.js dom electron

我正在编写一个 electrojs 应用程序。我想将字符串解析为 DOM Node ,并尝试使用 DOMParser parseFromString 来实现。这是代码:

let str = '<div id="customerList" style="display: none;"><ul></ul></div><script type="text/javascript" src="../js/customerList.js"></script>';
let nodes = new DOMParser().parseFromString(str, 'text/html').body.childNodes;
console.log(nodes);

这会返回一个 NodeList,其中包含 2 个元素,即预期的 div 和 scriptl。如果我在代码中添加以下部分,第一个元素 div 将从 NodeList 中消失:

let str = '<div id="customerList" style="display: none;"><ul></ul></div><script type="text/javascript" src="../js/customerList.js"></script>';
let nodes = new DOMParser().parseFromString(str, 'text/html').body.childNodes;
console.log(nodes);
for (let node of nodes) {
  contentDiv.appendChild(node);
}

for 循环位于 console.log 之后,并以某种方式改变了之前代码的行为。我似乎无法弄清楚为什么代码的行为会像它那样......因为我想提供有关 ipcRenderer 调用中第一个元素的信息,目前这实际上非常令人沮丧。为什么代码会有这样的表现?

最佳答案

Node.appendChild() 将 Node 移动到新的目的地。这就是它从您的 Node 列表中消失的原因。

您可以克隆 Node 以避免这种情况,如下所示:

let str = '<div id="customerList" style="display: none;"><ul></ul></div><script type="text/javascript" src="../js/customerList.js"></script>';
let nodes = new DOMParser().parseFromString(str, 'text/html').body.childNodes;
console.log(nodes);
for (let node of nodes) {
  contentDiv.appendChild(node.cloneNode());
}

这将从列表中追加所有(!) Node 的克隆,并保持您的 Node 列表不变。

引用:https://developer.mozilla.org/en-US/docs/Web/API/Node/appendChild

关于javascript - DOMParser parseFromString 仅在迭代结果主体 childNodes 时删除 Node ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60534792/

相关文章:

Node.js 错误 : Unexpected field

javascript - 使用多个 OR || 简化 IF 语句相同变量的条件

javascript - 什么时候 JavaScript 属性不是标识符?

c# - 制作相同宽度的 Kendo UI 文本框

javascript - 如何在鼠标单击时为 div 的每个外观添加 fade In() 效果?

javascript - 在使用socket.io时获取express.js中的当前用户?

javascript - 如何在 Node.js/ReactJS 中正确使用 DELETE by ID

java - 如何创建基于 JavaScript 数组的 Java 列表?

javascript - 我的网站如何让访问者登录到第三方网站?

node.js - 我可以用 libuv 做自定义事件吗?