ShadowRoot: slotAssignment-Eigenschaft
Baseline
Weitgehend verfügbar
Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit März 2023 browserübergreifend verfügbar.
Die schreibgeschützte slotAssignment-Eigenschaft des ShadowRoot-Interfaces gibt den Slot-Zuweisungsmodus für den Shadow-DOM-Baum zurück. Knoten werden entweder automatisch basierend auf Namensübereinstimmung (named) oder manuell (manual) zugewiesen.
Der Wert dieser Eigenschaft wird mit der slotAssignment-Option definiert, wenn Element.attachShadow() aufgerufen wird, oder mithilfe des shadowrootslotassignment-Attributs auf einem <template>-Element, wenn ein Shadow-Root deklarativ erstellt wird.
Wert
Ein String, der einer der folgenden sein kann:
named-
Elemente werden automatisch
<slot>-Elementen innerhalb dieses Shadow-Roots zugewiesen. Alle obersten Kind-Elemente des Hosts mit einemslot-Attribut, das demname-Attribut eines<slot>innerhalb dieses Shadow-Roots entspricht, werden diesem Slot zugewiesen. Alle obersten Kind-Elemente des Hosts ohneslot-Attribut werden einem<slot>ohnename-Attribut (dem "Standard-Slot") zugewiesen, falls vorhanden. manual-
Elemente werden nicht automatisch
<slot>-Elementen zugewiesen. Stattdessen müssen sie manuell mitHTMLSlotElement.assign()zugewiesen werden.
Beispiele
>Grundlegende Verwendung
Im untenstehenden Beispiel wird die assign()-Methode verwendet, um den richtigen Tab in einer tabulierten Anwendung anzuzeigen.
Die Funktion wird aufgerufen und das anzuzeigende Panel wird dem Slot zugewiesen.
Wir prüfen, ob slotAssignment named ist, um eine Ausnahme zu verhindern, die ausgelöst wird, wenn HTMLSlotElement.assign() aufgerufen wird.
function UpdateDisplayTab(elem, tabIdx) {
const shadow = elem.shadowRoot;
// This test is usually not needed, but can be useful when debugging
if (shadow.slotAssignment === "named") {
console.error(
"Trying to manually assign a slot on an automatically-assigned (named) slot",
);
}
const slot = shadow.querySelector("slot");
const panels = elem.querySelectorAll("tab-panel");
if (panels.length && tabIdx && tabIdx <= panels.length) {
slot.assign(panels[tabIdx - 1]);
} else {
slot.assign();
}
}
Spezifikationen
| Spezifikation |
|---|
| DOM> # dom-shadowroot-slotassignment> |
Browser-Kompatibilität
Siehe auch
Element.attachShadow()HTMLSlotElement.assign()shadowrootslotassignmentAttribut des<template>-ElementsHTMLTemplateElement.shadowRootSlotAssignment