gpt4 book ai didi

JavaScript insertBefore 无法正常工作

转载 作者:太空宇宙 更新时间:2023-11-04 13:40:38 24 4
gpt4 key购买 nike

试图使我在 this 上的回答更加灵活问题:

function invertDivs(parentDiv) {
var first = document.getElementById(parentDiv).firstChild;
console.log(first);
var second = document.getElementById(parentDiv).lastChild;
console.log(second);
document.getElementById(parentDiv).insertBefore(second, first);
}
<div id="parent">
<div id="first">Div 1</div>
<div id="second">Div 2</div>
</div>
<button onclick="invertDivs('parent');">Invert Divs</button>

然而,div 只是有时倒置,并非总是如此。

最初点击按钮会在控制台上产生这个:

enter image description here

第二次点击:

enter image description here

多次点击后:

enter image description here

我对代码有什么问题感到困惑。我选择父 div 的第一个 child ,并为最后一个 child 做同样的事情。然后我只是在第一个之前插入当前的第二个 div。函数到此结束。根据 insertBefore 函数的要求,它们也是父 div 的直接子级。

最佳答案

如评论中所述,firstChildlastChild 可以返回元素之间空白的文本节点。您可以使用 firstElementChildlastElementChild 来忽略这些。

function invertDivs(parentDiv) {
var first = document.getElementById(parentDiv).firstElementChild;
console.log(first);
var second = document.getElementById(parentDiv).lastElementChild;
console.log(second);
document.getElementById(parentDiv).insertBefore(second, first);
}
<div id="parent">
<div id="first">Div 1</div>
<div id="second">Div 2</div>
</div>
<button onclick="invertDivs('parent');">Invert Divs</button>

对于旧版浏览器可能需要的一些其他解决方法,请参阅 element.firstChild is returning '<TextNode ...' instead of an Object in FF

关于JavaScript insertBefore 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31684305/

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