Как переместить все дочерние элементы HTML в другой родитель с помощью JavaScript?
представьте себе:
<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
, они также должны быть перенесены как есть.
EDIT
чтобы быть ясным, я хочу, чтобы в конечном итоге с:
<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>
3 ответа:
в принципе, вы хотите пройти через каждый прямой потомок старого родительского узла и переместить его в новый родительский узел. Любые дети прямого потомка будут перемещены с ним.
var newParent = document.getElementById('new-parent'); var oldParent = document.getElementById('old-parent'); while (oldParent.childNodes.length > 0) { newParent.appendChild(oldParent.childNodes[0]); }
вот простая функция:
function setParent(el, newParent) { newParent.appendChild(el); }
el
' schildNodes
- это элементы для перемещения,newParent
- это элементel
будет перемещен, таким образом, вы бы выполнить функцию, как: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); }
этот ответ действительно работает только в том случае, если вам не нужно ничего делать, кроме передачи внутреннего кода (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 = '';
надеюсь, что это помогает!