可以用replaceChild交换<li>元素吗?

Pie*_*ter 2 html javascript dom

我有一个<li>元素列表:

<ul id="mylist">
  <li id="item1">Item 1</li>
  <li id="item2">Item 2</li>
  <li id="item3">Item 3</li>
</ul>
Run Code Online (Sandbox Code Playgroud)

我可以<li>replaceChild一个DOM树修改方法交换两个元素 - 比如item1和item2 吗?它适用于所有浏览器吗?

Que*_*tin 6

不,replaceChild会从DOM中删除一个.你要insertBefore

var a = document.getElementById('item1');
var b = document.getElementById('item2');
a.parentNode.insertBefore(b, a);
Run Code Online (Sandbox Code Playgroud)

当然,如果它们首先彼此相邻,它们只会交换它们.

replaceChild如果你想交换彼此不相邻的那些,你可以利用.

var a = document.getElementById('item1');
var b = document.getElementById('item3');
var after_b = b.nextSibling;
var p = a.parentNode;

p.replaceChild(b,a);

if (after_b) {
    p.replaceChild(a, after_b);
} else {
   p.appendChild(a);
} 
Run Code Online (Sandbox Code Playgroud)