CustomElementRegistry: upgrade()-Methode
Baseline
Weitgehend verfügbar
Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit Januar 2020 browserübergreifend verfügbar.
Die upgrade()-Methode der Schnittstelle CustomElementRegistry aktualisiert alle benutzerdefinierten Elemente mit Shadow DOM in einem Teilbaum eines Node, auch bevor sie mit dem Hauptdokument verbunden sind.
Syntax
upgrade(root)
Parameter
Rückgabewert
Keiner (undefined).
Beschreibung
Wenn ein HTML-Element geparst oder erstellt wird, kann es einen Tag-Namen verwenden, der einem benutzerdefinierten Element entspricht (z. B. <my-element>). Wenn die Klasse des benutzerdefinierten Elements zum Zeitpunkt der Erstellung noch nicht in der entsprechenden CustomElementRegistry registriert ist, liegt das Element als undefiniertes, einfaches HTMLElement vor. Es sieht aus und verhält sich wie jedes unbekannte Element – ohne besonderes Verhalten, Lifecycle-Callbacks oder benutzerdefinierte Prototypmethoden.
Bei der Aktualisierung wird ein solches Element nachträglich zu einem vollwertigen benutzerdefinierten Element, sobald seine Definition verfügbar ist. Wenn ein Element aktualisiert wird:
- Sein Konstruktor wird aufgerufen. Darin weist der Aufruf von
super()dem Element den Prototyp der mitdefine()registrierten Klasse des benutzerdefinierten Elements zu. - Wenn die Klasse
observedAttributesdefiniert, wirdattributeChangedCallback()für jedes Attribut aufgerufen, das bereits einen Wert hat. - Wenn das Element bereits verbunden ist, wird sein
connectedCallback()aufgerufen. - Die Callbacks
formAssociatedCallback()und/oderformDisabledCallback()werden aufgerufen, wenn die jeweiligen Bedingungen erfüllt sind.
Normalerweise werden Elemente automatisch aktualisiert, wenn ihre Definition mit define() registriert wird – allerdings nur, wenn sie bereits mit dem Dokument verbunden sind. Die Methode upgrade() ist nützlich, wenn Sie Elemente in einem nicht verbundenen DOM-Teilbaum aktualisieren müssen (beispielsweise Elemente, die mit Document.createElement() erstellt oder in ein DocumentFragment geparst wurden), bevor sie in das Dokument eingefügt werden.
Beispiele
Aus der HTML-Spezifikation:
const el = document.createElement("spider-man");
class SpiderMan extends HTMLElement {}
customElements.define("spider-man", SpiderMan);
console.assert(!(el instanceof SpiderMan)); // not yet upgraded
customElements.upgrade(el);
console.assert(el instanceof SpiderMan); // upgraded!
Spezifikationen
| Spezifikation |
|---|
| HTML> # dom-customelementregistry-upgrade-dev> |