这里真的没有必要使用 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,因此加载它不会增加成本。在许多情况下,它确实提供了一种令人满意的简洁性——当你把所有东西都放在一条线上时,催产素的小冲动。但也有成本。性能成本可能高达两个数量级,还有将程序员隐藏在真正发生的事情之外的成本。
在这种情况下,如果 OP 知道四个基本的 DOM API,他可能已经想出了如何编写简单的单行 while 循环将元素从一个地方移动到另一个地方,而不是试图弄清楚什么神奇一系列 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 从未流行起来”,Brendan 说。“所有这些分号和换行符使代码非常难以阅读。而且你水平阅读代码,而不是垂直阅读 - DUHHHH!JavaScript 没有赢!” 请参阅http://clubajax.org/brendan-eich-redesigns-javascript-to-look-like-jquery/#more-1491。