gpt4 book ai didi

javascript - 用一个简单的函数重新排列元素

转载 作者:行者123 更新时间:2023-11-30 17:23:11 25 4
gpt4 key购买 nike

 function rearrange(x, y) {
x.parentNode.replaceChild(x, y);
x.parentNode.insertBefore(y,x);
}

如果我这样做

var a = document.getElementsByClassName('btn-button-google')[0];
var b = document.getElementsByClassName('btn-button-doodle')[0];
rearrange(b,a);

出现以下错误

NotFoundError:无法在“节点”上执行“replaceChild”:要替换的节点不是该节点的子节点。

这是我理解的,因为 a 在一个 html div 中,而 b 在另一个 div 中,但我很好奇如何解决这个问题。这行得通

rearrange(b.parentNode,a.parentNode);

因为他们在同一个节点。

示例 HTML

<div class="container">
<div class="group">
<a href="" class="btn-button-bold"><a>
<a href="" class="btn-button-italic"><a>
<a href="" class="btn-button-strike"><a>
</div>
<div class="group">
<a href="" class="btn-button-font"><a>
<a href="" class="btn-button-ffamily"><a>
<a href="" class="btn-button-google"><a>
</div>
<div class="group">
<a href="" class="btn-button-smilies"><a>
<a href="" class="btn-button-doodle"><a>
<a href="" class="btn-button-source"><a>
</div>
</div>

最佳答案

.replaceChild 方法接受替换作为第一个参数,将要替换的 child 作为第二个参数。您将它们颠倒了,这导致了错误。

此外,如果打算交换,则需要保留对 y 原始位置的引用,因为一旦移动它,它就会被遗忘。

这适用于大多数情况:

var yPar = y.parentNode, ySib = y.nextSibling; 
x.parentNode.replaceChild(y, x);
yPar.insertBefore(x, ySib);

请记住,还有一个问题需要考虑。只要两个节点有不同的父节点,这就不是问题,但如果共享一个父节点,并且彼此相邻,并且缓存的 nextSiblingx 相同,那么就没有效果了。因此,如果可能的话,您需要对此进行测试,并处理这种特殊情况。

关于javascript - 用一个简单的函数重新排列元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24787008/

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