ここでjQueryを使用する必要は実際にはありません。これは、DOMノードを文字列化してから、それらを再解析してDOMに戻すというすべての作業に取り掛かる必要があります。
var span1=document.getElementById("selected-1"),
span2=document.getElementById("selected-2"),
insert=span2.firstChild,
elt;
while (elt=span1.lastChild) {
insert=span2.insertBefore(elt,insert); // removes the node from span1
}
span1.parentNode.removeChild(span1);
OPがjQueryソリューションについて質問したのは事実です。しかし、誰かがスイスアーミーナイフで釘を打ち込む方法を尋ねた場合でも、代わりにハンマーを使用することを提案するのは合理的であるようです。特に、すでにハンマーを持っている場合は、その使用方法を知っている必要があります。使用すると100倍速くなります。
アプリケーションの大部分がjQueryを使用していることを認識しているため、jQueryをロードするための増分コストはありません。そして、それは確かに多くの場合満足のいく簡潔さを提供します-あなたがすべてを一列に並べるとき、その小さなオキシトシンは急いでいます。しかし、コストもあります。最大2桁のパフォーマンスコストがあり、実際に起こっていることからプログラマーを隠すコストがあります。
この場合、OPが基本的なDOM APIの4つについて知っていれば、要素をある場所から別の場所にループ移動しながら、単純な1行を作成する方法を自分で理解できたはずです。それを達成するために一緒にチェーンするjQueryの呪文のシーケンス、行き詰まり、SOに投稿する必要があります。
http://jsperf.com/combine-dom-nodesでのパフォーマンスの比較を検討してください。これは、jQueryソリューションが100倍遅いことを示しています。
一方、Brendan Eichでさえ、jQueryチェーンのワンライナーパラダイムに近づいているようで、次の例があります。
$(document).getTDs().getEven().hover().css("yellow").addCustomEvent("setSelected").setSelected(this.currentMagicNode).get.out("white").getTDs().getOdd().hover().css("yellow").addCustomEvent("setSelected").setSelected(this.currentMagicNode).out("white");
ブレンダン氏は、「後から考えると、JavaScriptがうまくいかなかった理由がわかります」とコメントしています。「これらのセミコロンと改行はすべて、コードを読むのを非常に難しくします。そして、コードを垂直方向ではなく水平方向に読みます— DUHHHH!JavaScriptは勝ちません!」http://clubajax.org/brendan-eich-redesigns-javascript-to-look-like-jquery/#more-1491を参照してください。