Я хотел бы переместить один элемент DIV в другой. Например, я хочу переместить это (включая всех детей):
<div id="source">
...
</div>
в это:
<div id="destination">
...
</div>
так что у меня так:
<div id="destination">
<div id="source">
...
</div>
</div>
javascript
jquery
html
Марк Ричман
источник
источник
Ответы:
Когда-нибудь пробовал простой JavaScript ...
destination.appendChild(source);
?источник
onclick
фрагмента демонстрации ключевое словоvar
в своей попытке улучшить пост - но это неправильно!Вы можете использовать
appendTo
функцию (которая добавляет в конец элемента):В качестве альтернативы вы можете использовать
prependTo
функцию (которая добавляет в начало элемента):Пример:
Показать фрагмент кода
источник
it will be moved into the target (not cloned) and a new set consisting of the inserted element is returned
- api.jquery.com/appendtoмое решение:
ШАГ:
COPY:
Обратите внимание на использование .detach (). При копировании будьте осторожны, чтобы не дублировать идентификаторы.
источник
$('#nodeToMove').insertAfter('#insertAfterThisElement');
Я просто использовал:
Который я схватил отсюда .
источник
Как насчет решения JavaScript ?
Проверьте это.
источник
Если в том месте,
div
куда вы хотите поместить свой элемент, есть содержимое, и вы хотите, чтобы элемент отображался после основного содержимого:Если в том месте,
div
куда вы хотите поместить свой элемент, есть содержимое, и вы хотите показать элемент перед основным содержимым:Если место,
div
куда вы хотите поместить свой элемент, пусто или вы хотите заменить его полностью:Если вы хотите продублировать элемент перед любым из вышеперечисленных:
источник
Ты можешь использовать:
Вставить после,
Чтобы вставить внутрь другого элемента,
источник
Если вам нужна быстрая демонстрация и более подробная информация о том, как вы перемещаете элементы, попробуйте эту ссылку:
http://html-tuts.com/move-div-in-another-div-with-jquery
Вот краткий пример:
Чтобы переместить элемент выше:
Чтобы переместить ПОСЛЕ элемента:
Чтобы переместиться внутрь элемента, НАД ВСЕМИ элементами внутри этого контейнера:
Чтобы переместиться внутрь элемента, ПОСЛЕ ВСЕХ элементов внутри этого контейнера:
источник
Вы можете использовать следующий код для перемещения источника к месту назначения
попробуйте работать codepen
Показать фрагмент кода
источник
Старый вопрос, но он попал сюда, потому что мне нужно переместить контент из одного контейнера в другой, включая всех слушателей событий .
У jQuery нет способа сделать это, но есть стандартная функция DOM appendChild.
Использование appendChild удаляет .source и помещает его в цель, включая его прослушиватели событий: https://developer.mozilla.org/en-US/docs/Web/API/Node.appendChild
источник
Вы также можете попробовать:
Но это полностью перезапишет все, что у вас есть
#destination
.источник
Я заметил огромную утечку памяти и разницу в производительности между
insertAfter
&after
илиinsertBefore
&before
. Если у вас тонны DOM-элементов или вам нужно использоватьafter()
илиbefore()
внутри события MouseMove , память браузера, вероятно, увеличится, и следующие операции будут выполняться очень медленно.Решение, которое я только что испытал, состоит в том, чтобы вместо этого использовать insertBefore
before()
и insertAfterafter()
.источник
Вы можете использовать чистый JavaScript, используя
appendChild()
метод ...Таким образом, вы можете сделать это, чтобы выполнить работу, это то, что я создал для вас, используя
appendChild()
, запустите и посмотрите, как это работает для вашего случая:источник
Для полноты картины есть другой подход
wrap()
илиwrapAll()
упомянутый в этой статье . Таким образом, вопрос OP мог бы быть решен с помощью этого (то есть, предполагая, что<div id="destination" />
он еще не существует, следующий подход создаст такую обертку с нуля - у OP не было ясности относительно того, существует ли обертка уже или нет):Это звучит многообещающе. Тем не менее, когда я пытался сделать
$("[id^=row]").wrapAll("<fieldset></fieldset>")
несколько вложенных структур, как это:Это правильно оборачивает те
<div>...</div>
и<input>...</input>
НО ИНАЧЕ пропускает<label>...</label>
. Поэтому я в конечном итоге использовал явное$("row1").append("#a_predefined_fieldset")
вместо этого. Итак, YMMV.источник
грязное улучшение размера ответа Беким Бакай
источник