Подтвердить что ты не робот

Как переместить все дочерние элементы 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, их нужно будет перенести как-то тоже.

ИЗМЕНИТЬ

Чтобы быть ясным, я хочу в итоге:

<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>
4b9b3361

Ответ 1

DEMO

В принципе, вы хотите перебрать каждый прямой потомк старого родителя node и перенести его в новый родитель. Любые дети прямого потомка будут перемещаться вместе с ним.

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

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

Ответ 2

Здесь простая функция:

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

el childNodes являются элементами, которые нужно переместить, 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);
}

Вот демо

Ответ 3

Этот ответ действительно работает, если вам не нужно ничего делать, кроме как передать внутренний код (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 = '';

Надеюсь, это поможет!

Ответ 4

Если вы не используете - в именах идентификаторов, то вы можете сделать это

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>

Ответ 5

Современный способ:

newParent.append(...oldParent.childNodes);
  1. .append является заменой .appendChild. Основное отличие состоит в том, что он принимает несколько узлов одновременно и даже простые строки, например .append('hello!')
  2. oldParent.childNodes является итеративным, поэтому его можно распространять с помощью ... чтобы стать несколькими параметрами .append()