ShadowRoot
Baseline
Widely available
*
This feature is well established and works across many devices and browser versions. It’s been available across browsers since Januar 2020.
* Some parts of this feature may have varying levels of support.
Das ShadowRoot-Interface der Shadow DOM API ist der Wurzelknoten eines DOM-Teilbaums, der separat vom Haupt-DOM-Baum eines Dokuments gerendert wird.
Sie können einen Verweis auf das Shadow-Root eines Elements mit dessen Element.shadowRoot-Eigenschaft abrufen, vorausgesetzt, es wurde mit Element.attachShadow() und der mode-Option auf open erstellt.
Instanzeigenschaften
ShadowRoot.activeElementSchreibgeschützt-
Gibt das
Elementinnerhalb des Shadow-Baums zurück, das den Fokus hat. ShadowRoot.adoptedStyleSheets-
Fügen Sie ein Array von konstruierten Stylesheets hinzu, die vom Shadow-DOM-Teilbaum genutzt werden sollen. Diese können mit anderen DOM-Teilbäumen geteilt werden, die denselben übergeordneten
Document-Knoten teilen, sowie mit dem Dokument selbst. ShadowRoot.clonableSchreibgeschützt-
Ein Boolean, der angibt, ob das Shadow-Root klonbar ist.
ShadowRoot.delegatesFocusSchreibgeschützt-
Ein Boolean, der angibt, ob das Shadow-Root den Fokus delegiert, wenn ein nicht fokussierbarer Knoten ausgewählt wird.
ShadowRoot.fullscreenElementSchreibgeschützt-
Das Element, das sich derzeit im Vollbildmodus für diesen Shadow-Baum befindet.
ShadowRoot.hostSchreibgeschützt-
Gibt einen Verweis auf das DOM-Element zurück, an das das
ShadowRootangehängt ist. ShadowRoot.innerHTML-
Setzt oder gibt einen Verweis auf den DOM-Baum innerhalb des
ShadowRootzurück. ShadowRoot.modeSchreibgeschützt-
Der Modus des
ShadowRoot, entwederopenoderclosed. Dies definiert, ob die internen Funktionen des Shadow-Roots von JavaScript aus zugänglich sind oder nicht. ShadowRoot.pictureInPictureElementSchreibgeschützt-
Gibt das
Elementinnerhalb des Shadow-Baums zurück, das derzeit im Bild-im-Bild-Modus präsentiert wird. ShadowRoot.pointerLockElementSchreibgeschützt-
Gibt das
Elementzurück, das als Ziel für Mausereignisse gesetzt ist, während der Zeiger gesperrt ist.null, wenn die Sperre aussteht, der Zeiger entsperrt ist oder das Ziel in einem anderen Baum liegt. ShadowRoot.serializableSchreibgeschützt-
Ein Boolean, der angibt, ob das Shadow-Root serialisierbar ist. Ein serialisierbares Shadow-Root innerhalb eines Elements wird von
Element.getHTML()oderShadowRoot.getHTML()serialisiert, wenn dessenoptions.serializableShadowRoots-Parameter auftruegesetzt ist. Dies wird beim Erstellen des Shadow-Roots festgelegt. ShadowRoot.slotAssignmentSchreibgeschützt-
Gibt einen String zurück, der den Typ der Slot-Zuweisung enthält, entweder
manualodernamed. ShadowRoot.styleSheetsSchreibgeschützt-
Gibt eine
StyleSheetListvonCSSStyleSheet-Objekten für Stylesheets zurück, die explizit in einen oder in einem Shadow-Baum eingebettet sind.
Instanzmethoden
ShadowRoot.getAnimations()-
Gibt ein Array aller
Animation-Objekte zurück, die derzeit in Kraft sind und deren Zielelemente Nachkommen des Shadow-Baums sind. ShadowRoot.getSelection()Nicht standardisiert-
Gibt ein
Selection-Objekt zurück, das den vom Benutzer ausgewählten Textbereich oder die aktuelle Position des Cursors darstellt. ShadowRoot.elementFromPoint()Nicht standardisiert-
Gibt das oberste Element an den angegebenen Koordinaten zurück.
ShadowRoot.elementsFromPoint()Nicht standardisiert-
Gibt ein Array aller Elemente an den angegebenen Koordinaten zurück.
ShadowRoot.setHTML()Experimentell-
Bietet eine XSS-sichere Methode, um einen String aus HTML zu parsen und zu bereinigen und ihn in ein
DocumentFragmentumzuwandeln, welches dann den bestehenden Baum im Shadow-DOM ersetzt. ShadowRoot.setHTMLUnsafe()-
Parsiert einen String aus HTML in ein Dokumentfragment, ohne Bereinigung, welches dann den ursprünglichen Teilbaum des Shadow-Roots ersetzt. Der HTML-String kann deklarative Shadow-Roots einschließen, die als Template-Elemente geparst würden, wenn das HTML mit
ShadowRoot.innerHTMLgesetzt wird.
Ereignisse
Die folgenden Ereignisse sind ShadowRoot über das Ereignis-Bubbling von HTMLSlotElement verfügbar:
HTMLSlotElementslotchangeEreignis-
Ein Ereignis, das ausgelöst wird, wenn sich die in diesem Slot enthaltenen Knoten ändern.
Beispiele
Die folgenden Schnipsel stammen aus unserem life-cycle-callbacks-Beispiel (sehen Sie es auch live), welches ein Element erstellt, das ein Quadrat einer Größe und Farbe anzeigt, die in den Attributen des Elements angegeben sind.
Innerhalb der Klasse des <custom-square>-Elements enthalten wir einige Lebenszyklus-Callbacks, die einen Aufruf an eine externe Funktion, updateStyle(), machen, die tatsächlich die Größe und Farbe auf das Element anwendet. Sie sehen, dass wir this (das benutzerdefinierte Element selbst) als Parameter übergeben.
class Square extends HTMLElement {
// …
connectedCallback() {
console.log("Custom square element added to page.");
updateStyle(this);
}
attributeChangedCallback(name, oldValue, newValue) {
console.log("Custom square element attributes changed.");
updateStyle(this);
}
// …
}
In der Funktion updateStyle() selbst erhalten wir einen Verweis auf das Shadow-DOM mittels Element.shadowRoot.
Von hier aus verwenden wir Standard-DOM-Traversal-Techniken, um das <style>-Element innerhalb des Shadow-DOM zu finden und dann das darin gefundene CSS zu aktualisieren:
function updateStyle(elem) {
const shadow = elem.shadowRoot;
const childNodes = shadow.childNodes;
for (const node of childNodes) {
if (node.nodeName === "STYLE") {
node.textContent = `
div {
width: ${elem.getAttribute("l")}px;
height: ${elem.getAttribute("l")}px;
background-color: ${elem.getAttribute("c")};
}
`;
}
}
}
Spezifikationen
| Specification |
|---|
| DOM> # interface-shadowroot> |
Browser-Kompatibilität
Loading…