想像してみてください:
<div id="old-parent">
<span>Foo</span>
<b>Bar</b>
Hello World
</div>
<div id="new-parent"></div>
JQueryなしですべての子ノード(要素とテキストノードの両方)をold-parent
からnew-parent
に移動するために記述できるJavaScriptは何ですか?
ノード間の空白は気にしませんが、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>
基本的に、古い親ノードのそれぞれの直接の子孫をループし、新しい親に移動します。直接の子孫の子はすべて一緒に移動します。
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
のchildNodes
は移動する要素です。newParent
はelement 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);
}
現代の方法:
newParent.append(...oldParent.childNodes);
.append
は.appendChild
の代わりになります。主な違いは、.append('hello!')
のように、一度に複数のノードとプレーンな文字列を受け入れることです。oldParent.childNodes
はiterableであるため、...
で拡散して.append()
の複数のパラメーターになることができます。両方の互換性テーブル(要するに:Edge 17 +、Safari 10+):
この答えは、内部コード(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 = '';
お役に立てれば!
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>