如何移动 body 中的所有元素,并为某些元素添加例外而不移动?

How to move All elements in the body with adding exception for some elements to not be moved?

我觉得标题很清楚,但是我有一些例子给你们,这是我的想法:

我有这个Html5:

<html>
<head></head>
<body class="oldParent">
<div class="p1"></div>
<div class="p2"></div>
<div class="p3"></div>
<div class="p4"></div>
<div class="p5"></div>
<div class="NewParent"></div>
</body>
</html>

如您所见,我的新父母是我的旧父母child

(我想移动除 NewParent 之外的所有 body 元素),我需要移动除此元素之外的所有元素:

<div class="**NewParent**"></div>

我是 Javascript 的新手,我认为你们知道如何添加例外 为此,我也发现了这个:

var newParent = document.getElementById('NewParent');
        var oldParent = document.getElementById('OldParent');

while (oldParent.childNodes.length > 0) {
    newParent.appendChild(oldParent.childNodes[0]);
}

但我不知道如何添加例外!?

我需要帮助:(

您可以试试下面的方法

  • 获取要保留的当前元素。
  • 创建该元素的克隆。
  • 清空整个父元素。
  • 附加您之前克隆的元素。

var newParent = document.getElementsByClassName('NewParent')[0];
var cln = newParent.cloneNode(true);
document.getElementsByClassName('oldParent')[0].innerHTML = '';
document.getElementsByClassName('oldParent')[0].appendChild(cln);
<html>
  <head></head>
  <body class="oldParent">
    <div class="p1">1</div>
    <div class="p2">2</div>
    <div class="p3">3</div>
    <div class="p4"5></div>
    <div class="p5">5</div>
    <div class="NewParent">77</div>
  </body>
</html>

您已经非常接近您的原始代码了。只需切换到 getElementsByClassName - 但请注意它 returns 一个集合,因此您必须对其进行索引。如果这是一个选项,您可能想切换到 id。

然后您基本上可以添加一个 if 条件来测试要排除的元素的 class名称:

var newParent = document.getElementsByClassName('NewParent')[0];
var oldParent = document.getElementsByClassName('oldParent')[0];

while (oldParent.childNodes.length > 0) {
  if (oldParent.childNodes[0].className !== 'NewParent') {
    newParent.appendChild(oldParent.childNodes[0]);
  }
  else { break; }
}

这里有一个 jsfiddle 你可以玩。请注意您的 class 名称,新旧 parent 名称的大小写不同。

我想补充一点,虽然这最接近您的原始代码,但它实际上可能不是解决此问题的最佳方法。这假设您的新 parent 是集合中的最后一个,因为由于您的循环方式,它必须跳出您的 while 循环。如其他答案所示,克隆可能是更安全的解决方案。