Проблема с методами .html()
заключается в том, что он преобразует элементы DOM в HTML и наоборот. Вы потеряете все обработчики событий и данные, связанные с этими элементами.
Используйте .contents()
[документы] вместо:
$("#div1").contents().appendTo('#div2').end().fadeOut();
или если вы хотите скопировать содержимое:
$("#div1").clone(true, true).contents().appendTo('#div2');
$("#div1").fadeOut();
Всегда полезно читать документацию, когда вы используете методы. Э.Г.
$('#div1').append('#div2');
добавит строку #div2
к элементу с идентификатором div1
. В документации написано:
Вставить содержимое, указанное параметром, в конец каждого элемента в наборе соответствующих элементов.
и
content : элемент DOM, строка HTML или объект jQuery для вставки в конце каждого элемента в наборе соответствующих элементов.
Аналогично для $('#div1').html('#div2');
:
htmlString : строка HTML, устанавливаемая в качестве содержимого каждого соответствующего элемента.
Он просто заменит содержимое #div1
на строку '#div2'
.
С другой стороны
$('#div1').appendTo('#div2');
добавит элемент с идентификатором div1
к элементу с идентификатором div2
:
Вставить каждый элемент в наборе соответствующих элементов до конца цели.
Документация jQuery довольно хорошая, рекомендую прочитать.