Lassen Sie uns sagen, ich habe drei <div>
Elemente auf einer Seite. Wie kann ich Positionen des ersten und dritten <div>
tauschen? jQuery ist in Ordnung.JavaScript beweglichen Element im DOM
Antwort
Trivial mit jQuery
$('#div1').insertAfter('#div3');
$('#div3').insertBefore('#div2');
Wenn Sie wollen, dass es immer wieder tun, müssen Sie verschiedene Selektoren verwenden, da die divs ihre ids behalten, wie sie um bewegt werden.
$(function() {
setInterval(function() {
$('div:first').insertAfter($('div').eq(2));
$('div').eq(1).insertBefore('div:first');
}, 3000);
});
jQuery.fn.swap = function(b){
b = jQuery(b)[0];
var a = this[0];
var t = a.parentNode.insertBefore(document.createTextNode(''), a);
b.parentNode.insertBefore(a, b);
t.parentNode.insertBefore(b, t);
t.parentNode.removeChild(t);
return this;
};
und es wie folgt verwendet werden:
$('#div1').swap('#div2');
, wenn Sie nicht wollen, jQuery verwenden Sie die Funktion leicht anpassen können.
Es gibt keine Notwendigkeit, eine Bibliothek für eine solche triviale Aufgabe zu verwenden:
var divs = document.getElementsByTagName("div"); // order: first, second, third
divs[2].parentNode.insertBefore(divs[2], divs[0]); // order: third, first, second
divs[2].parentNode.insertBefore(divs[2], divs[1]); // order: third, second, third
Dies berücksichtigt die Tatsache, dass getElementsByTagName
eine Live NodeList zurückgibt, die automatisch aktualisiert wird, um die Reihenfolge der Elemente im DOM zu reflektieren wie sie manipuliert werden.
Sie könnten auch verwenden:
var divs = document.getElementsByTagName("div"); // order: first, second, third
divs[0].parentNode.appendChild(divs[0]); // order: second, third, first
divs[1].parentNode.insertBefore(divs[0], divs[1]); // order: third, second, third
und es gibt verschiedene andere mögliche Permutationen, wenn Sie wie das Experimentieren fühlen:
divs[0].parentNode.appendChild(divs[0].parentNode.replaceChild(divs[2], divs[0]));
zum Beispiel :-)
Stimmt, aber es ist schwer, mit der Eleganz und Lesbarkeit zu argumentieren, die so etwas wie jQuery bietet - ganz zu schweigen von den erweiterten Möglichkeiten, die es gibt. –
Das sagte +1 für den bare-codierten Ansatz. –
Ja, aber wer macht nur diese eine Sache? – tvanfosson
JQuery Ansatz erwähnt auf das Oberteil wird funktionieren. Sie können auch JQuery und CSS .Say für zB Div 1 verwenden Sie Klasse1 und Div2 angewendet haben Klasse Klasse2 angewendet haben (sagen Sie für zB jede Klasse von CSS bietet eine bestimmte Position im Browser), jetzt können Sie die Klassen verwenden jquery vertauschen oder Javascript (das wird die Position ändern)
var swap = function() {
var divs = document.getElementsByTagName('div');
var div1 = divs[0];
var div2 = divs[1];
var div3 = divs[2];
div3.parentNode.insertBefore(div1, div3);
div1.parentNode.insertBefore(div3, div2);
};
Diese Funktion mag seltsam erscheinen, aber es stützt sich stark auf Standards, um richtig zu funktionieren. In der Tat scheint es, als ob es besser funktioniert als the jQuery version that tvanfosson posted, die den Swap nur zweimal zu tun scheint.
Auf welche Standardspezifitäten verlässt man sich?
insertBefore Fügt den Knoten newChild vor dem vorhandenen untergeordneten Knoten refChild ein. Wenn refChild null ist, fügen Sie newChild um das Ende der Liste der untergeordneten Elemente ein. Wenn newChild ein DocumentFragment-Objekt ist, werden alle untergeordneten Elemente in der gleichen Reihenfolge eingefügt, bevor refChild. Wenn das newChild in der Struktur bereits ist, wird es zuerst entfernt.
Sorry für Bumping dieses Themas ich über das „Swap-DOM-Elemente“ Problem gestolpert und spielte ein wenig herum
Das Ergebnis ist eine jQuery-native „Lösung“, die wirklich hübsch zu sein scheint (leider weiß ich nicht an den jQuery-Interna, was geschieht, wenn diese
tun) Der Code:
$('#element1').insertAfter($('#element2'));
Die jQuery-Dokumentation sagt t Hut insertAfter()
bewegt das Element und es nicht
.before und .after
Verwendung moderner Vanille JS klonen! Viel besser/sauberer als vorher
const div1 = document.getElementById("div1");
const div2 = document.getElementById("div2");
const div3 = document.getElementById("div3");
div2.after(div1);
div2.before(div3);
Browser Support - 84% Global, 87% der US-wie von Mar '18
Kein Internet Explorer unterstützt noch. – Norris
Sie sollten nicht weniger wartungsfähigen Code schreiben müssen, um Benutzer in alten oder nicht standardkonformen Browsern zu unterstützen. Wenn Sie nicht in Unternehmen arbeiten, werden nur wenige Benutzer vermissen. – Gibolt
Andere Methoden funktionieren genauso gut in Bezug auf die Wartbarkeit, vor allem wenn sie in einer netten sauberen Funktion verpackt sind. Ich bin alles dafür, modernen Code zu schreiben, aber das ist blutig. Es ist großartig zu wissen, was die Zukunft bringt, aber so sehr ich auch nichts mit IE zu tun habe - es ist wichtig zu wissen, was die Auswirkungen Ihrer Entscheidungen sind. In diesem Fall - eine kaputte Web-App in jedem IE-Browser. Wenn es dir gut geht - großartig!Ich habe den Kommentar nur hinzugefügt, um jeden zu informieren, der das googelt :) – Norris
- 1. Javascript beweglichen Kreis
- 2. Javascript: Wie man über DOM Element aktualisiert?
- 3. Prototyp/Javascript DOM-Element ID als Parameter
- 4. Javascript Wortzählung für jedes gegebene DOM-Element
- 5. JavaScript HTML-Element zu DOM-Selektor
- 6. Finden Sie Javascript, das DOM-Element ändert
- 7. Wie verschiebt man ein Element im DOM?
- 8. Javascript bekommen das DOM-Element eine Funktion von
- 9. Javascript: DOM Probleme
- 10. Holder.js - Zurück DOM-Element?
- 11. erhält das Recht dom Element
- 12. Kann Javascript auf jedem Dom Element nach "onDomChange" hören?
- 13. erhalten Wert in einem Element dynamisch mit DOM in Javascript
- 14. Senden der gesamten Javascript-Konsolenausgabe an ein DOM-Element
- 15. Weisen Sie JavaScript-Funktion zu einem DOM-Element
- 16. , wie die HTML für ein DOM-Element in Javascript bekommen
- 17. Trackmouseover-Ereignis mit beweglichen Elementen
- 18. Was ist ein DOM-Element?
- 19. Keep Form id wie numerischer Wert im HTML Dom Element
- 20. HTML-DOM-Element im Frontend mit Knoten js
- 21. Get ComponentRef von DOM-Element
- 22. JavaScript/DOM-Ereignisnamenskonvention
- 23. Gibt document.getElementById ein Live-Dom-Element zurück?
- 24. Wie verwende ich ein Skript-DOM-Element?
- 25. prüfen dom Element, wenn es Eigentum hat
- 26. erstellen DOM-Element mit jQuery
- 27. Dom Element des Absatzes Text
- 28. bewegen DOM HTML-Element um
- 29. Proxy-Dom-Element gibt Aufruffehler
- 30. DOM-Element mit Cherrio extrahieren
Es gibt einen irgendwo Fehler. Es scheint nur zweimal zu funktionieren. http://jsbin.com/evedu –
Ich habe nur erwartet, dass es einmal funktioniert. – tvanfosson
@Ionut - der Punkt ist, dass es von der relativen Positionierung der Elemente abhängt. Sobald Sie die Reihenfolge ändern, können Sie die erste und dritte nicht mehr mit ihren IDs finden und müssen einen anderen Weg finden. Meine Antwort sollte nur die Funktionalität der Methoden veranschaulichen, um die angeforderte Aufgabe zu erfüllen, und nicht eine umfassende Lösung sein, um das erste und das dritte Div in einer Menge beliebig oft zu vertauschen. – tvanfosson