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-Element eines Elements über dessen Element.shadowRoot
-Eigenschaft abrufen, sofern es mit Element.attachShadow()
und der mode
-Option auf open
erstellt wurde.
Instanzeigenschaften
ShadowRoot.activeElement
Schreibgeschützt-
Gibt das
Element
innerhalb des Shadow-Trees zurück, das den Fokus hat. 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 teilen, sowie mit dem Dokument selbst. ShadowRoot.clonable
Schreibgeschützt-
Ein boolescher Wert, der angibt, ob das Shadow-Root klonbar ist.
ShadowRoot.delegatesFocus
Schreibgeschützt-
Ein boolescher Wert, der anzeigt, ob das Shadow-Root den Fokus delegiert, wenn ein nicht fokussierbarer Knoten ausgewählt wird.
ShadowRoot.fullscreenElement
Schreibgeschützt-
Das Element, das derzeit im Vollbildmodus für diesen Shadow-Tree angezeigt wird.
ShadowRoot.host
Schreibgeschützt-
Gibt eine Referenz auf das DOM-Element zurück, an das das
ShadowRoot
angehängt ist. ShadowRoot.innerHTML
-
Setzt oder gibt eine Referenz auf den DOM-Baum innerhalb des
ShadowRoot
zurück. ShadowRoot.mode
Schreibgeschützt-
Der Modus des
ShadowRoot
, entwederopen
oderclosed
. Dies definiert, ob die internen Funktionen des Shadow-Roots von JavaScript aus zugänglich sind oder nicht. ShadowRoot.pictureInPictureElement
Schreibgeschützt-
Gibt das
Element
innerhalb des Shadow-Trees zurück, das derzeit im Picture-in-Picture-Modus präsentiert wird. ShadowRoot.pointerLockElement
Schreibgeschützt-
Gibt das
Element
zurü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 sich in einem anderen Baum befindet. ShadowRoot.serializable
Schreibgeschü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 dessenoptions.serializableShadowRoots
Parameter auftrue
gesetzt ist. Dies wird bei der Erstellung des Shadow-Roots festgelegt. ShadowRoot.slotAssignment
Schreibgeschützt-
Gibt einen String zurück, der den Typ der Slot-Zuordnung enthält, entweder
manual
odernamed
. ShadowRoot.styleSheets
Schreibgeschützt-
Gibt eine
StyleSheetList
vonCSSStyleSheet
-Objekten für Stylesheets zurück, die explizit in einen Shadow-Tree eingebunden oder eingebettet sind.
Instanzmethoden
ShadowRoot.getAnimations()
-
Gibt ein Array von allen
Animation
-Objekten zurück, die derzeit in Kraft sind und deren Zielelemente Nachkommen des Shadow-Trees 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()
-
Bietet eine XSS-sichere Methode, um einen HTML-String in einen
DocumentFragment
zu 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 Shadow-Roots ersetzt. Der HTML-String kann deklarative Shadow-Roots enthalten, die als Template-Elemente geparst werden würden, wenn das HTML mit
ShadowRoot.innerHTML
gesetzt wurde.
Ereignisse
Die folgenden Ereignisse sind über das Ereignisbubbling von HTMLSlotElement
für ShadowRoot
verfügbar:
HTMLSlotElement
slotchange
Ereignis-
Ein Ereignis, das ausgelöst wird, wenn sich die im Slot enthaltenen Knoten ändern.
Beispiele
Die folgenden Codeausschnitte 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 Klassen-Definition des <custom-square>
-Elements fügen wir einige Lebenszyklus-Callbacks ein, die einen Aufruf einer externen Funktion, updateStyle()
, beinhalten, die tatsächlich die Größe und Farbe auf das Element anwendet. Sie sehen, dass wir es 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 über Element.shadowRoot
.
Von hier aus verwenden wir Standard-DOM-Traversierungstechniken, 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…