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 Stammknoten eines DOM-Teilbaums, der separat vom Haupt-DOM-Baum eines Dokuments gerendert wird.
Sie können eine Referenz zum Shadow-Root eines Elements über seine Element.shadowRoot-Eigenschaft abrufen, vorausgesetzt, es wurde mit Element.attachShadow() und der mode-Option auf open gesetzt, erstellt.
Instanz-Eigenschaften
ShadowRoot.activeElementSchreibgeschützt-
Gibt das
Elementim Shadow-Baum zurück, das den Fokus hat. ShadowRoot.adoptedStyleSheets-
Fügt dem Shadow-DOM-Teilbaum ein Array von konstruierten Stylesheets hinzu. Diese können mit anderen DOM-Teilbäumen, die denselben übergeordneten
Document-Knoten und das Dokument selbst teilen, gemeinsam genutzt werden. ShadowRoot.clonableSchreibgeschützt-
Ein Boolean-Wert, der angibt, ob der Shadow-Root klonbar ist.
ShadowRoot.delegatesFocusSchreibgeschützt-
Ein Boolean-Wert, der angibt, ob der 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 eine Referenz auf das DOM-Element zurück, an das das
ShadowRootangehängt ist. ShadowRoot.innerHTML-
Setzt oder gibt eine Referenz 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
Elementim Shadow-Baum zurück, das derzeit im Bild-im-Bild-Modus angezeigt 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 wenn das Ziel in einem anderen Baum liegt. ShadowRoot.referenceTargetSchreibgeschützt Experimentell Nicht standardisiert-
Ein Zeichenfolgenwert, der das effektive Ziel eines jeden Elementverweises von außerhalb des Host-Elements auf den Shadow-Host angibt. Der Wert sollte die ID eines Elements innerhalb des Shadow DOM sein. Wenn gesetzt, führen Zielverweise auf das Host-Element von außerhalb des Shadow DOM dazu, dass das referenzierte Ziel-Element das effektive Ziel des Verweises auf das Host-Element wird.
ShadowRoot.serializableSchreibgeschützt-
Ein Boolean-Wert, der angibt, ob der Shadow-Root serialisierbar ist. Ein serialisierbarer Shadow-Root in einem Element wird durch
Element.getHTML()oderShadowRoot.getHTML()serialisiert, wenn dessenoptions.serializableShadowRoots-Parameter auftruegesetzt ist. Dies wird beim Erstellen des Shadow-Roots festgelegt. ShadowRoot.slotAssignmentSchreibgeschützt-
Gibt einen Zeichenfolgenwert 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 Shadow-Baum verlinkt oder eingebettet sind.
Instanz-Methoden
ShadowRoot.getAnimations()-
Gibt ein Array aller
Animation-Objekte zurück, die derzeit in Wirkung sind und deren Ziel-Elemente 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 eine Zeichenfolge von HTML in einen
DocumentFragmentzu parsen und zu bereinigen, der dann den bestehenden Baum im Shadow-DOM ersetzt. ShadowRoot.setHTMLUnsafe()-
Parst eine Zeichenfolge von HTML in einen Dokumenten-Fragment ohne Bereinigung, der dann den ursprünglichen Teilbaum des Shadowroots ersetzt. Die HTML-Zeichenfolge kann deklarative Shadow-Roots enthalten, die als Template-Elemente geparst würden, wenn das HTML mit
ShadowRoot.innerHTMLgesetzt wurde.
Ereignisse
Die folgenden Ereignisse sind für ShadowRoot über das Ereignis-Bubblen von HTMLSlotElement verfügbar:
HTMLSlotElementslotchange-Ereignis-
Ein Ereignis, das ausgelöst wird, wenn sich die Knoten in diesem Slot ändern.
Beispiele
Die folgenden Ausschnitte stammen aus unserem life-cycle-callbacks-Beispiel (siehe es auch live), das ein Element erstellt, das ein Quadrat in einer Größe und Farbe anzeigt, die in den Attributen des Elements angegeben sind.
Innerhalb der Klassendefinition des <custom-square>-Elements fügen wir einige Lebenszyklus-Callbacks ein, die einen Aufruf an eine externe Funktion, updateStyle(), machen, die tatsächlich die Größe und Farbe auf das Element anwendet. Sie werden sehen, dass wir ihm 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 updateStyle()-Funktion selbst erhalten wir eine Referenz auf das Shadow DOM mit Element.shadowRoot.
Von hier aus verwenden wir standardmäßige DOM-Traversierungstechniken, um das <style>-Element im 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> |