Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten.Erfahre mehr über dieses Experiment.
DocumentFragment: moveBefore() Methode
Limited availability
This feature is not Baseline because it does not work in some of the most widely-used browsers.
DiemoveBefore() Methode derDocumentFragment-Schnittstelle bewegt einen angegebenenNode innerhalb des aufrufendenDocumentFragment als direktes Kind vor einen angegebenen Referenzknoten.
In diesem Artikel
Syntax
moveBefore(movedNode, referenceNode)Parameter
movedNodeEin
Node, der den zu verschiebenden Knoten darstellt. Beachten Sie, dass dies einElementoder einCharacterDataKnoten sein muss.referenceNodeEin
Node, vor demmovedNodeverschoben wird, odernull. Wenn der Wertnullist, wirdmovedNodeam Ende der Kindknoten des aufrufendenDocumentFragmenteingefügt.
Rückgabewert
Keiner (undefined).
Ausnahmen
HierarchyRequestErrorTypeErrorIn den folgenden Situationen ausgelöst:
- Der angegebene
movedNodeist bereits zum DOM hinzugefügt, und Sie versuchen, ihn innerhalb einesDocumentFragmentzu verschieben. - Sie versuchen,
movedNodezwischen zwei verschiedenen Dokumentfragmenten zu verschieben. - Der angegebene
movedNodeist keinElementoderCharacterDataKnoten.
- Der angegebene
NotFoundErrorTypeErrorDer angegebene
referenceNodeist kein Kind desDocumentFragment, für das SiemoveBefore()aufrufen, das heißt, das Fragment, in das SiemovedNodeverschieben wollen.TypeErrorTypeErrorDas zweite Argument wurde nicht angegeben.
Beschreibung
DiemoveBefore() Methode bewegt einen angegebenen Knoten an eine neue Stelle imDocumentFragment. Sie bietet eine ähnliche Funktionalität wie dieNode.insertBefore() Methode, außer dass sie den Knoten nicht entfernt und dann wieder einfügt. Das bedeutet, dass der Zustand des Knotens (der beim Verschieben mitinsertBefore() und ähnlichen Mechanismen zurückgesetzt würde) nach dem Verschieben beibehalten wird. Dies schließt ein:
- Animation undÜbergangs Zustände.
- Ladezustand von
<iframe>. - Interaktivitätszustände (zum Beispiel
:focusund:active). - Zustand vonFullscreen Elementen.
- Offen/Geschlossen-Zustand vonPopovers.
- Modalzustand von
<dialog>Elementen (modale Dialoge werden nicht geschlossen).
Der Wiedergabezustand von<video> und<audio> Elementen ist nicht in der obigen Liste enthalten, da diese Elemente ihren Zustand beibehalten, wenn sie entfernt und wieder eingefügt werden, unabhängig von dem verwendeten Mechanismus.
Wenn Sie Änderungen am DOM mit einemMutationObserver beobachten, werden Knoten, die mitmoveBefore() verschoben wurden, alsentfernter Knoten undhinzugefügter Knoten aufgezeichnet.
moveBefore() Einschränkungen
Es gibt einige Einschränkungen, die Sie beachten müssen, wenn SiemoveBefore() verwenden:
- Es funktioniert nur, wenn Sie einen Knoten innerhalb desselben Dokumentfragments verschieben.
- Es wird nicht funktionieren, wenn Sie versuchen, einen Knoten, der bereits dem DOM hinzugefügt wurde, innerhalb eines
DocumentFragmentzu verschieben.
In solchen Fällen wirdmoveBefore() mit einerHierarchyRequestError Ausnahme fehlschlagen. Wenn die obigen Einschränkungen Anforderungen für Ihren speziellen Anwendungsfall sind, sollten Sie stattdessenNode.insertBefore() verwenden odertry...catch nutzen, um die Fehler zu behandeln, die in solchen Fällen auftreten.
Beispiele
>GrundlegendemoveBefore() Nutzung
In diesem Demo illustrieren wir die grundlegende Nutzung vonmoveBefore().
HTML
Das HTML enthält drei<button> Elemente und ein<article> Element. Wir werden die Buttons verwenden, umDocumentFragment Instanzen in das<article> einzufügen und es zu leeren.
<button>Insert fragment</button><button>Insert modified fragment</button><button>Clear</button><article></article>CSS
Wir stellen ein grundlegendes Styling für das Aussehen und den Abstand von Elementen bereit, die später als Kinder von mit JavaScript generiertenDocumentFragments in die Seite eingefügt werden.
#section1,#section2,#mover { display: inline-block; width: 200px; height: 30px; border: 5px solid rgb(0 0 0 / 0.25); margin-top: 10px;}#section1,#section2 { background-color: hotpink;}#mover { background-color: orange;}JavaScript
In unserem Skript definieren wir eine Funktion,createFragment(), die einDocumentFragment erstellt, das ein<div> Element und zwei<section> Elemente als unmittelbare Kinder enthält.
Wir hängen dann einen Klick-Ereignislistener an jedes<button> mittelsaddEventListener() an:
- Der erste Button fügt das
DocumentFragmentunverändert dem<article>Element#wrapperhinzu. - Der zweite Button fügt das
DocumentFragmentdem<article>Element#wrapperhinzu, verwendet aber zuerstmoveBefore(), um das<div>zum zweiten Kind desDocumentFragmentstatt zum ersten zu machen. - Der dritte Button leert das
<article>Element#wrappermittelsinnerHTML.
const wrapper = document.getElementById("wrapper");const insertBtn1 = document.getElementById("insert1");const insertBtn2 = document.getElementById("insert2");const clearBtn = document.getElementById("clear");function createFragment() { const fragment = new DocumentFragment(); const divElem = document.createElement("div"); const section1 = document.createElement("section"); const section2 = document.createElement("section"); divElem.id = "mover"; section1.id = "section1"; section2.id = "section2"; fragment.appendChild(divElem); fragment.appendChild(section1); fragment.appendChild(section2); return fragment;}insertBtn1.addEventListener("click", () => { const fragment = createFragment(); wrapper.appendChild(fragment);});insertBtn2.addEventListener("click", () => { const fragment = createFragment(); fragment.moveBefore( fragment.querySelector("#mover"), fragment.querySelector("#section2"), ); wrapper.appendChild(fragment);});clearBtn.addEventListener("click", () => { wrapper.innerHTML = "";});Ergebnis
Das gerenderte Beispiel sieht wie folgt aus:
Versuchen Sie, die ersten beiden Buttons einige Male zu klicken und bemerken Sie, wie dieDocumentFragment Struktur vom zweiten Button modifiziert wird.
Spezifikationen
| Specification |
|---|
| DOM> # dom-parentnode-movebefore> |