gpt4 book ai didi

Javascript .forEach() 不适用于 DOM 节点,因为它们会在此过程中发生变化

转载 作者:数据小太阳 更新时间:2023-10-29 04:50:16 26 4
gpt4 key购买 nike

<分区>

我有以下错误代码将所有 DOM 元素从一个节点移动到另一个节点:

div.childNodes.forEach((n) => me.container.appendChild(n));

不幸的是,这只复制了一半的节点。这样做的原因似乎是在内部,javascript 像在标准 for 循环中一样计数:

for(let i = 0; i < div.childNodes.length; i++) {
me.container.appendChild(div.childNodes[i]);
}

这会导致该行为,因为 div.childNodes.length 每次将其中一项附加到 me.container 时都会减少。

下面的结构也有同样的问题:

for (const n of div.childNodes) {
me.container.appendChild(n);
}

这里的问题是,执行此操作并避免此类错误的最佳做法是什么?我们是否应该相信 javascript 的函数式函数会实际执行它们所描述的操作?

我找到了两个有效的候选者,我想知道是否存在明显的速度差异,因为我更喜欢第一个,因为它看起来更简单:

Array.from(div.childNodes).forEach((n) => me.container.appendChild(n));

无需转换:

for (let i = div.childNodes.length; i > 0; i--) {
me.container.appendChild(div.childNodes[0]);
}

这两个示例都有效并复制了所有节点。

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com