JQuery присоединяется к нескольким элементам

Я пытаюсь использовать метод jQuery append() для добавления общего содержимого к набору div следующим образом:

$("#horizontal_menu").append(menu);
$("#vertical_menu").append(menu);

Я нахожу, что содержимое (в данном случае меню) добавляется к vertical_menu, но не horizontal_menu. Добавляет ли к одному <div> исключить возможность добавления этого содержимого в другой <div> ?

Ответы

Ответ 1

Вы можете перевернуть его, используя .appendTo() следующим образом:

menu.appendTo("#horizontal_menu, #vertical_menu");

Если menu не является объектом jQuery, просто оберните его:

$(menu).appendTo("#horizontal_menu, #vertical_menu");

В настоящее время то, что происходит, добавляется или более точно перемещается в #horizontal_menu, а затем сразу же перемещается. Передача селектора или нескольких элементов в .appendTo() заставляет его клонировать и присоединяться к каждому из них.

Ответ 2

Связано ли с добавлением одно из них, чтобы добавить этот контент другому?

Что касается элементов DOM, связанных с [jQuery wrapped], да. Под капотом jQuery вызывает appendChild, который при вызове несколько раз с тем же элементом просто перемещает его из текущей позиции в новую позицию.

Вы можете попробовать cloning сделать копию:

var $menu = $(menu);
$("#horizontal_menu").append($menu.clone());
$("#vertical_menu").append($menu.clone());

Вы можете передать true в clone(), если вы хотите, чтобы обработчики событий также были скопированы.

Ответ 3

Еще cloning twist:

        var menu = $("#menu").contents();
        menu.clone().appendTo("#ulOne");
        menu.clone().appendTo("#ulTwo");