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 eine Referenz auf das Shadow Root eines Elements über dessen Element.shadowRoot-Eigenschaft abrufen, sofern es mit Element.attachShadow() erstellt wurde und die mode-Option auf open gesetzt ist.
Instanzeigenschaften
ShadowRoot.activeElementSchreibgeschützt-
Gibt das innerhalb des Shadow-Baums fokussierte
Elementzurück. ShadowRoot.adoptedStyleSheets-
Fügt ein Array von konstruierten Stylesheets hinzu, die vom Shadow DOM-Teilbaum verwendet werden sollen. Diese können mit anderen DOM-Teilbäumen geteilt werden, die denselben übergeordneten
Document-Knoten und das Dokument selbst teilen. ShadowRoot.clonableSchreibgeschützt-
Ein boolescher Wert, der angibt, ob das Shadow Root klonbar ist.
ShadowRoot.delegatesFocusSchreibgeschützt-
Ein boolescher Wert, der angibt, ob das Shadow Root den Fokus delegiert, wenn ein nicht fokussierbarer Knoten ausgewählt ist.
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
ShadowRootangebunden 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 Root von JavaScript aus zugänglich sind oder nicht. ShadowRoot.pictureInPictureElementSchreibgeschützt-
Gibt das
Elementinnerhalb des Shadow-Baums zurück, das derzeit im Bild-in-Bild-Modus angezeigt wird. ShadowRoot.pointerLockElementSchreibgeschützt-
Gibt das
Elementzurück, das als Ziel für Mausereignisse festgelegt ist, während der Zeiger gesperrt ist.null, wenn die Sperrung aussteht, der Zeiger entsperrt ist oder wenn das Ziel in einem anderen Baum ist. ShadowRoot.referenceTargetExperimentell Nicht standardisiert-
Ein Zeichenfolgenwert, der das effektive Ziel eines jeden Elementverweises angibt, der von außerhalb des Host-Elements gegen den Shadow-Host gemacht wird. Der Wert sollte die ID eines Elements innerhalb des Shadow DOM sein. Wenn festgelegt, führen Zielverweise auf das Host-Element von außerhalb des Shadow DOM dazu, dass das referenzierte Ziel-Element zum effektiven Ziel des Verweises auf das Host-Element wird.
ShadowRoot.serializableSchreibgeschützt-
Ein boolescher Wert, der angibt, ob das Shadow Root serialisierbar ist. Ein serialisierbares Shadow Root innerhalb eines Elements wird von
Element.getHTML()oderShadowRoot.getHTML()serialisiert, wenn der Parameteroptions.serializableShadowRootsauftruegesetzt ist. Dies wird festgelegt, wenn das Shadow Root erstellt wird. ShadowRoot.slotAssignmentSchreibgeschützt-
Gibt einen String zurück, der den Typ der Slot-Zuordnung 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.
Instanzmethoden
ShadowRoot.getAnimations()-
Gibt ein Array aller derzeit wirksamen
Animation-Objekte zurück, 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 einen HTML-String in einen
DocumentFragmentzu parsen und zu bereinigen, der dann den bestehenden Baum im Shadow DOM ersetzt. ShadowRoot.setHTMLUnsafe()-
Parst einen HTML-String in ein Dokumentfragment, ohne Bereinigung, das dann den ursprünglichen Teilbaum des Shadowroots ersetzt. Der HTML-String kann deklarative Shadow-Roots enthalten, die als Template-Elemente geparst würden, wenn das HTML mit
ShadowRoot.innerHTMLgesetzt wurde.
Ereignisse
Die folgenden Ereignisse stehen ShadowRoot über Ereignis-Bubbling von HTMLSlotElement zur Verfügung:
HTMLSlotElementslotchange-Ereignis-
Ein Ereignis, das ausgelöst wird, wenn sich die in diesem Slot enthaltenen Knoten ändern.
Beispiele
Die folgenden Snippets stammen aus unserem life-cycle-callbacks-Beispiel (siehe es auch live), das ein Element erstellt, das ein Quadrat von einer in den Attributen des Elements angegebenen Größe und Farbe anzeigt.
In der <custom-square>-Elementklassendefinition fügen wir einige Lebenszyklus-Callbacks ein, die einen Aufruf einer externen Funktion, updateStyle(), machen, die tatsächlich die Größe und Farbe auf das Element anwendet. Sie werden 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 updateStyle()-Funktion selbst erhalten wir eine Referenz auf das Shadow DOM mittels Element.shadowRoot.
Von hier aus verwenden wir Standard-DOM-Traversierungstechniken, um das <style>-Element innerhalb des Shadow DOM zu finden und dann das darin enthaltene 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> |