如何使用JavaScript将所有HTML子元素移动到另一个父元素?

fcipmucu  于 2023-03-16  发布在  Java
关注(0)|答案(5)|浏览(212)

想象一下:

<div id="old-parent">
    <span>Foo</span>
    <b>Bar</b>
    Hello World
</div>
<div id="new-parent"></div>

可以编写什么JavaScript来将所有子节点(包括元素和文本节点)从old-parent移动到new-parent而不使用jQuery?
我不关心节点之间的空白,虽然我希望捕获杂散的Hello World,但它们也需要按原样迁移。

编辑

为了明确起见,我想以如下方式结束:

<div id="old-parent"></div>
<div id="new-parent">
    <span>Foo</span>
    <b>Bar</b>
    Hello World
</div>

这是一个拟议重复的问题的答案将导致:

<div id="new-parent">
    <div id="old-parent">
        <span>Foo</span>
        <b>Bar</b>
        Hello World
    </div>
</div>
az31mfrm

az31mfrm1#

基本上,您需要遍历旧父节点的每个直接后代,并将其移动到新父节点,直接后代的任何子节点都将随之移动。

var newParent = document.getElementById('new-parent');
var oldParent = document.getElementById('old-parent');

function move() {
  while (oldParent.childNodes.length > 0) {
    newParent.appendChild(oldParent.childNodes[0]);
  }
}
#old-parent {
  background-color: red;
}

#new-parent {
  background-color: green;
}
<div id="old-parent">
  <span>Foo</span>
  <b>Bar</b> Hello World
</div>
<div id="new-parent"></div>
<br>
<button onclick="move()" id="button">Move childs</button>

External link

uqcuzwp8

uqcuzwp82#

现代方式:

newParent.append(...oldParent.childNodes);
  1. .append.appendChild的替代品,主要区别在于它一次接受多个节点,甚至接受普通字符串,如.append('hello!')
  2. oldParent.childNodes是 * 可迭代的 *,因此它可以与...一起展开,以变成.append()的多个参数
    除了IE浏览器,其他浏览器都支持它。
tjrkku2a

tjrkku2a3#

下面是一个简单的函数:

function setParent(el, newParent)
{
    newParent.appendChild(el);
}

elchildNodes是要移动的元素,newParentel要移动到的**元素,**因此您将执行如下函数:

var l = document.getElementById('old-parent').childNodes.length;
var a = document.getElementById('old-parent');
var b = document.getElementById('new-parent');
for (var i = l; i >= 0; i--)
{
    setParent(a.childNodes[0], b);
}

**一个

qhhrdooz

qhhrdooz4#

这是一个简单的解决方案-切换节点id并改变它们的顺序。如果你不在id的名称中使用-,你可以这样做

oldParent.id='xxx';
newParent.id='oldParent';
xxx.id='newParent';
oldParent.parentNode.insertBefore(oldParent,newParent);
#newParent { color: red }
<div id="oldParent">
    <span>Foo</span>
    <b>Bar</b>
    Hello World
</div>
<div id="newParent"></div>
bvuwiixz

bvuwiixz5#

只有在除了将内部代码(innerHTML)从一个代码转移到另一个代码之外不需要做任何事情的情况下,这个答案才真正有效:

// Define old parent
var oldParent = document.getElementById('old-parent');

// Define new parent
var newParent = document.getElementById('new-parent');

// Basically takes the inner code of the old, and places it into the new one
newParent.innerHTML = oldParent.innerHTML;

// Delete / Clear the innerHTML / code of the old Parent
oldParent.innerHTML = '';

希望这有帮助!

相关问题