CustomElementRegistry: upgrade() Methode
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.
Die upgrade() Methode der CustomElementRegistry-Schnittstelle aktualisiert alle schattenhaltigen benutzerdefinierten Elemente in einem Node-Unterbaum, selbst 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 noch nicht mit der entsprechenden CustomElementRegistry registriert wurde, existiert das Element als ein undefiniertes, einfaches HTMLElement. Es sieht aus und verhält sich wie jedes unbekannte Element — es hat kein spezielles Verhalten, keine Lebenszyklus-Callbacks oder benutzerdefinierten Prototyp-Methoden.
Upgraden ist der Prozess des nachträglichen Hochstufens eines solchen Elements zu einem vollwertigen benutzerdefinierten Element, sobald seine Definition verfügbar wird. Wenn ein Element aktualisiert wird:
- Sein Prototyp wird auf die registrierte benutzerdefinierte Elementklasse umgestellt, die mit
define()registriert wurde. - Sein
connectedCallback()und alle anderen anwendbaren Lebenszyklus-Callbacks werden aufgerufen. - Wenn die Klasse
observedAttributesdefiniert, wird für jedes Attribut, das bereits einen Wert hat, derattributeChangedCallback()aufgerufen.
Normalerweise werden Elemente automatisch aufgerüstet, wenn ihre Definition über define() registriert wird, aber nur, wenn sie bereits mit dem Dokument verbunden sind. Die upgrade()-Methode ist nützlich, wenn Sie Elemente aktualisieren müssen, die in einem getrennten DOM-Unterbaum existieren (z. B. Elemente, die über Document.createElement() erstellt oder in einen DocumentFragment geparst wurden), bevor sie in das Dokument eingefügt werden.
Beispiele
Übernommen 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
| Specification |
|---|
| HTML> # dom-customelementregistry-upgrade-dev> |