How to move all HTML element children to another parent using JavaScript?
Solution 1:
Basically, you want to loop through each direct descendent of the old-parent node, and move it to the new parent. Any children of a direct descendent will get moved with it.
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
Solution 2:
Modern way:
newParent.append(...oldParent.childNodes);
-
.append
is the replacement for.appendChild
. The main difference is that it accepts multiple nodes at once and even plain strings, like.append('hello!')
-
oldParent.childNodes
is iterable so it can be spread with...
to become multiple parameters of.append()
Compatibility tables of both (in short: Edge 17+, Safari 10+):
- https://developer.mozilla.org/en-US/docs/Web/API/ParentNode/append#Browser_compatibility
- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_syntax#Browser_compatibility
Solution 3:
Here's a simple function:
function setParent(el, newParent)
{
newParent.appendChild(el);
}
el
's childNodes
are the elements to be moved, newParent
is the element el
will be moved to, so you would execute the function like:
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);
}
Here is the Demo