.html()
方法的问题在于它将DOM元素转换为HTML,反之亦然。这样会丢失所有与这些元素绑定的事件处理程序和数据。
应改用 .contents()
[文档] 方法:
$("#div1").contents().appendTo('#div2').end().fadeOut();
或者如果你想复制内容:
$("#div1").clone(true, true).contents().appendTo('#div2');
$("#div1").fadeOut();
当你使用方法时,阅读文档总是很有帮助的。例如:
$('#div1').append('#div2');
将字符串#div2
添加到ID为div1
的元素中。文档说明如下:
将由参数指定的内容插入到匹配元素集合中每个元素的末尾。
以及
content: 要插入到匹配元素集合中每个元素末尾的DOM元素、HTML字符串或jQuery对象。
$('#div1').html('#div2');
也是类似的:
htmlString: 作为每个匹配元素内容的HTML字符串。
它只会用字符串'#div2'
替换#div1
的内容。
另一方面
$('#div1').appendTo('#div2');
将具有ID div1
的元素追加到具有ID div2
的元素中:
将匹配元素集合中的每个元素插入到目标元素的末尾。
jQuery文档非常好,我建议阅读它。
#div1
的内容,而不仅仅是复制它,这可能没问题,但可能值得一提。这也意味着fadeOut
可能看不到,因为元素的内容已经移动了。 - James Allardice