javascript - 如何一个一个地插入元素
问题描述
我有一个容器跨度元素,在这个跨度中,我有几个子跨度元素,例如:
<span>
<span>o</span>
<span>r</span>
<span>l</span>
<span>d</span>
</span>
上述容器span之前的前一个span称为preElement,结构为:
<span>w</span>
我想要做的是在 preElement 之后将所有子元素插入容器中。新的结构应该是:
<span>w</span>
<span>o</span>
<span>r</span>
<span>l</span>
<span>d</span>
我所做的是:
for (var i = 0; i < container.children.length; i++) {
preElement.parentNode.insertBefore(container.children[i],
preElement.nextSibling);
preElement = preElement.nextSibling;
}
你们能告诉我为什么它不正确吗?
解决方案
问题是按索引循环遍历子项将是不正确的,因为child[i]
将从调用列表中删除insertBefore
导致跳过的元素。
您可以将子级视为container
堆栈并继续弹出容器的最后一个子级并将其插入preElement
直到为空:
const [preElement, container] = document.getElementsByTagName("span");
while (container.children.length) {
preElement.parentNode.insertBefore(
container.children[container.children.length-1],
preElement.nextSibling
);
}
<span>w</span>
<span>
<span>o</span>
<span>r</span>
<span>l</span>
<span>d</span>
</span>
或者,坚持preElement
反复移动到下一个兄弟姐妹的方法:
let [preElement, container] = document.getElementsByTagName("span");
while (container.children.length) {
preElement.parentNode.insertBefore(
container.children[0],
preElement.nextSibling
);
preElement = preElement.nextSibling;
}
<span>w</span>
<span>
<span>o</span>
<span>r</span>
<span>l</span>
<span>d</span>
</span>
推荐阅读
- node.js - 如何使用 discord.js 将发布在不同服务器上的消息转发给我?
- python - UnicodeEncodeError: 'ascii' codec can't encode character u'\xa0' in position 10 error while creating data flow template
- python - 我在使用 app.route() 时遇到烧瓶问题
- flutter - 错误:在此之前应为“{”。@覆盖
- php - 尝试读取数组上的属性
- javascript - 如何防止我的 while 循环只打印出一个结果?
- python - 完成我的场景后如何删除表格?
- mongodb - MongoDB 聚合匹配条件失败
- php - 如何从数据库中获取图像并在 laravel 中使用 ajax 以编辑形式预览它?
- javascript - jQuery 动画延迟回调执行