Chciałbym przenieść jeden element DIV do innego. Na przykład chcę to przenieść (w tym wszystkie dzieci):
<div id="source">
...
</div>
zaangażowany w to:
<div id="destination">
...
</div>
więc mam to:
<div id="destination">
<div id="source">
...
</div>
</div>
javascript
jquery
html
Mark Richman
źródło
źródło
Odpowiedzi:
Czy kiedykolwiek próbowałeś zwykłego JavaScript ...
destination.appendChild(source);
?źródło
onclick
fragmentu wersji demo słowem kluczowymvar
w swojej próbie ulepszenia posta - ale to źle!Możesz użyć
appendTo
funkcji (która dodaje się do końca elementu):Alternatywnie możesz użyć
prependTo
funkcji (która dodaje się do początku elementu):Przykład:
Pokaż fragment kodu
źródło
it will be moved into the target (not cloned) and a new set consisting of the inserted element is returned
- api.jquery.com/appendtomoje rozwiązanie:
RUSZAJ SIĘ:
KOPIUJ:
Zwróć uwagę na użycie .detach (). Podczas kopiowania uważaj, aby nie powielać identyfikatorów.
źródło
$('#nodeToMove').insertAfter('#insertAfterThisElement');
Właśnie użyłem:
Który stąd złapałem .
źródło
Co z rozwiązaniem JavaScript ?
Sprawdź to.
źródło
Jeśli w
div
miejscu, w którym chcesz umieścić element, znajduje się treść, a chcesz, aby element wyświetlał się po głównej zawartości:Jeśli w
div
miejscu, w którym chcesz umieścić element, znajduje się zawartość, a chcesz pokazać element przed główną treścią:Jeśli miejsce, w
div
którym chcesz umieścić element, jest puste lub chcesz go całkowicie zastąpić :Jeśli chcesz powielić element przed którymkolwiek z powyższych:
źródło
Możesz użyć:
Aby wstawić po,
Aby wstawić do innego elementu,
źródło
Jeśli chcesz mieć szybkie demo i więcej szczegółów na temat przenoszenia elementów, wypróbuj ten link:
http://html-tuts.com/move-div-in-another-div-with-jquery
Oto krótki przykład:
Aby przenieść POWYŻEJ elementu:
Aby przejść PO elemencie:
Aby poruszać się w elemencie, POWYŻEJ WSZYSTKIE elementy w tym kontenerze:
Aby poruszać się wewnątrz elementu, PO WSZYSTKICH elementach w tym kontenerze:
źródło
Możesz użyć następującego kodu, aby przenieść źródło do miejsca docelowego
spróbuj działać codepen
Pokaż fragment kodu
źródło
Stare pytanie, ale dotarłem tutaj, ponieważ muszę przenosić zawartość z jednego kontenera do drugiego, w tym wszystkich detektorów zdarzeń .
jQuery nie ma na to sposobu, ale robi to standardowa funkcja DOM appendChild.
Użycie appendChild usuwa .source i umieszcza go w celu, w tym w detektorach zdarzeń: https://developer.mozilla.org/en-US/docs/Web/API/Node.appendChild
źródło
Możesz także spróbować:
Ale to całkowicie zastąpi wszystko, co masz
#destination
.źródło
Zauważyłem ogromny przeciek pamięci i różnicę wydajności między
insertAfter
iafter
lubinsertBefore
ibefore
. Jeśli masz mnóstwo elementów DOM lub potrzebujesz użyćafter()
lubbefore()
wewnątrz zdarzenia MouseMove , pamięć przeglądarki prawdopodobnie wzrośnie, a kolejne operacje będą przebiegać naprawdę wolno.Rozwiązaniem, którego właśnie doświadczyłem, jest użycie insertBefore zamiast
before()
i insertAfter zamiastafter()
.źródło
Możesz użyć czystego JavaScript, używając
appendChild()
metody ...Aby to zrobić, możesz to zrobić, oto, co dla ciebie stworzyłem, używając
appendChild()
, uruchamiając i sprawdzając, jak to działa w twoim przypadku:źródło
Dla kompletności istnieje inne podejście
wrap()
lubwrapAll()
wspomniane w tym artykule . Pytanie OP może więc zostać rozwiązane w ten sposób (tzn. Zakładając, że<div id="destination" />
jeszcze nie istnieje, poniższe podejście utworzy takie opakowanie od zera - PO nie było jasne, czy opakowanie już istnieje, czy nie):Brzmi obiecująco. Jednak gdy próbowałem zrobić
$("[id^=row]").wrapAll("<fieldset></fieldset>")
na wielu zagnieżdżonych strukturach, takich jak to:To właściwie zawija te
<div>...</div>
i<input>...</input>
ale jakoś pominięto<label>...</label>
. Więc$("row1").append("#a_predefined_fieldset")
zamiast tego użyłem jawnego . Więc YMMV.źródło