在我的代码中,我经常需要用新的子列表替换某个HTML容器的所有子容器.
最快的方法是什么?我目前的方法是将所有新元素收集到DocumentFragment中.我发现然后实际替换孩子的唯一方法是逐个删除所有孩子,并附加片段.有没有更快的方法?
注意:解决方案不需要跨浏览器,但最好不要求使用3d-party组件,如jQuery.目标设备是一个非常慢的CPU 上的WebKit,所以我需要完全控制任何回流.
Ste*_*fan 38
如果您只想替换所有孩子,关于类型,为什么不将其内容设置为''然后添加您的代码:
container.innerHTML = '';
container.appendChild( newContainerElements );
Run Code Online (Sandbox Code Playgroud)
这将基本上以最快的方式删除所有的孩子:)
Mas*_*eed 15
replaceChildren()API!现在可以使用(跨浏览器支持)replaceChildren() API替换所有子项:
container.replaceChildren(...arrayOfNewChildren);
Run Code Online (Sandbox Code Playgroud)
这将同时执行以下两项操作:a)删除所有现有子项,以及b)在一次操作中附加所有给定的新子项。
您还可以使用相同的 API 来删除现有的子项,而不替换它们:
container.replaceChildren();
Run Code Online (Sandbox Code Playgroud)
这在 Chrome/Edge 86+、Firefox 78+ 和 Safari 14+ 中受支持。这是完全指定的行为。这可能比这里提出的任何其他方法都要快,因为移除旧孩子和添加新孩子是 a) 不需要innerHTML,并且 b) 在一个步骤而不是多个步骤中完成。
remove而不是removeChildwhile (container.firstChild) {
container.firstChild.remove();
}
Run Code Online (Sandbox Code Playgroud)
或者:
let child;
while (child = container.firstChild) {
child.remove();
}
Run Code Online (Sandbox Code Playgroud)
它不是直接解决问题,但在大多数情况下它是可用的,并且可能是更高效的方法之一。
您可以换出整个节点,而不是删除和填充其内容。
oldNode.parentElement.replaceChild(newNode, oldNode)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19207 次 |
| 最近记录: |