ShadowRoot
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since January 2020.
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-Element eines Elements über seine Element.shadowRoot
-Eigenschaft abrufen, vorausgesetzt, es wurde mit Element.attachShadow()
und der mode
-Option open
erstellt.
Instanzeigenschaften
ShadowRoot.activeElement
Nur lesbar-
Gibt das
Element
innerhalb des Shadow-Baums zurück, das den Fokus hat. ShadowRoot.adoptedStyleSheets
-
Fügt ein Array von erstellten 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.clonable
Nur lesbar-
Ein Boolean, der angibt, ob das Shadow-Root klonbar ist.
ShadowRoot.delegatesFocus
Nur lesbar-
Ein Boolean, der angibt, ob das Shadow-Root den Fokus delegiert, wenn ein nicht fokussierbares Element ausgewählt wird.
ShadowRoot.fullscreenElement
Nur lesbar-
Das Element, das aktuell im Vollbildmodus für diesen Shadow-Baum ist.
ShadowRoot.host
Nur lesbar-
Gibt einen Verweis auf das DOM-Element zurück, an das das
ShadowRoot
angehängt ist. ShadowRoot.innerHTML
-
Setzt oder gibt einen Verweis auf den DOM-Baum innerhalb des
ShadowRoot
zurück. ShadowRoot.mode
Nur lesbar-
Der Modus des
ShadowRoot
, entwederopen
oderclosed
. Dies definiert, ob die internen Funktionen des Shadow-Root aus JavaScript zugänglich sind oder nicht. ShadowRoot.pictureInPictureElement
Nur lesbar-
Gibt das
Element
innerhalb des Shadow-Baums zurück, das aktuell im Bild-im-Bild-Modus dargestellt wird. ShadowRoot.pointerLockElement
Nur lesbar-
Gibt das
Element
zurück, das als Ziel für Mausevents festgelegt ist, während der Zeiger gesperrt ist.null
, wenn die Sperrung aussteht, der Zeiger entsperrt ist oder das Ziel in einem anderen Baum liegt. ShadowRoot.serializable
Nur lesbar-
Ein Boolean, der angibt, ob das Shadow-Root serialisierbar ist. Ein serialisierbares Shadow-Root innerhalb eines Elements wird serialisiert, wenn
Element.getHTML()
oderShadowRoot.getHTML()
aufgerufen wird und dessenoptions.serializableShadowRoots
-Parameter auftrue
gesetzt ist. Dies wird beim Erstellen des Shadow-Root festgelegt. ShadowRoot.slotAssignment
Nur lesbar-
Gibt einen String zurück, der den Typ der Slot-Zuweisung enthält, entweder
manual
odernamed
. ShadowRoot.styleSheets
Nur lesbar-
Gibt eine
StyleSheetList
vonCSSStyleSheet
-Objekten für Stylesheets zurück, die explizit in einem Shadow-Baum verlinkt oder eingebettet sind.
Instanzmethoden
ShadowRoot.getAnimations()
-
Gibt ein Array aller
Animation
-Objekte zurück, die derzeit wirksam 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.setHTMLUnsafe()
-
Analysiert einen HTML-String in ein Dokumentfragment, ohne es zu bereinigen, das dann den Original-Teilbaum des Shadowroots ersetzt. Der HTML-String kann deklarative Shadow-Roots enthalten, die als Template-Elemente analysiert werden würden, wenn der HTML-String mit
ShadowRoot.innerHTML
gesetzt wurde.
Ereignisse
Die folgenden Ereignisse sind über das Ereignis-Bubbling 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 Code-Snippets stammen aus unserem life-cycle-callbacks-Beispiel (siehe es auch live), das ein Element erstellt, das ein Quadrat von 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 einer externen Funktion, updateStyle()
, machen, die tatsächlich die Größe und Farbe auf das Element anwendet. Sie werden sehen, dass wir dieser Funktion this
(das benutzerdefinierte Element selbst) als Parameter übergeben.
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 einen Verweis auf das Shadow-DOM mit 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 Standard # interface-shadowroot |
Browser-Kompatibilität
BCD tables only load in the browser