Signatur
Beschreibung
Die Eigenschaft isConnected gibt true zurück, wenn der Knoten Teil eines Dokumentbaums ist. Er muss dazu nicht direkt unter dem Document hängen: Es reicht, wenn eine Kette von Elternknoten dorthin führt. Die Kette darf auch über Shadow-Roots laufen. Frisch erzeugte Knoten (document.createElement()), Knoten in einem DocumentFragment oder in einem <template>-Inhalt und entfernte Knoten liefern false.
Häufig braucht man das in Web Components, denn connectedCallback() kann auch dann aufgerufen werden, wenn das Element schon wieder entfernt wurde. Mit this.isConnected lässt sich das vor teurer Initialisierung prüfen. Ebenso nützlich ist die Eigenschaft in asynchronem Code: Ein fetch kann zurückkommen, nachdem das Ziel-Element längst entfernt wurde.
Früher schrieb man dafür document.contains(node) oder document.documentElement.contains(node). Diese Prüfung übersieht aber Knoten in Shadow-DOM-Bäumen, weil contains() keine Shadow-Grenzen überschreitet. isConnected dagegen berücksichtigt den Shadow-including root und ist dadurch in diesem Fall zuverlässiger.
Rückgabewert
true, wenn der Knoten (auch über Shadow-Roots hinweg) mit einem Document verbunden ist, sonst false.Beispiele
Zustand vor und nach dem Einfügen und Entfernen
const box = document.createElement('div');
console.log(box.isConnected); // noch nicht eingefügt
document.body.append(box);
console.log(box.isConnected);
box.remove();
console.log(box.isConnected);
Asynchrones Ergebnis nur rendern, wenn das Ziel noch existiert
const loadUserCard = async (container, userId) => {
const res = await fetch(`/api/users/${userId}`);
const user = await res.json();
// Container wurde womöglich inzwischen entfernt (z. B. Seitenwechsel in einer SPA)
if (!container.isConnected) {
console.log('Container entfernt – Rendern übersprungen');
return;
}
container.textContent = user.name;
};
loadUserCard(document.querySelector('#user-card'), 42);
Web Component: Initialisierung in connectedCallback absichern
class LiveClock extends HTMLElement {
connectedCallback() {
// Kann aufgerufen werden, obwohl das Element schon wieder entfernt wurde
if (!this.isConnected) return;
this.timer = setInterval(() => {
this.textContent = new Date().toLocaleTimeString('de-DE');
}, 1000);
}
disconnectedCallback() {
clearInterval(this.timer);
}
}
customElements.define('live-clock', LiveClock);
document.body.append(document.createElement('live-clock'));
Knoten im Shadow DOM: isConnected vs. document.contains()
const host = document.createElement('div');
document.body.append(host);
const shadow = host.attachShadow({ mode: 'open' });
const inner = document.createElement('span');
shadow.append(inner);
console.log(inner.isConnected);
console.log(document.contains(inner)); // contains() überschreitet keine Shadow-Grenzen
// Wichtig · Fallstricke
- Schreibgeschützt: Eine Zuweisung wie
node.isConnected = truewird im Sloppy Mode stillschweigend ignoriert und löst im Strict Mode einenTypeErroraus. - Nur eine Momentaufnahme: Die Eigenschaft meldet keine Änderungen von selbst. Wer auf Einfügen oder Entfernen reagieren will, nimmt
MutationObserveroder bei Custom ElementsconnectedCallbackunddisconnectedCallback. - Anderes Dokument:
trueheißt nur, dass der Knoten mit irgendeinem Dokument verbunden ist, zum Beispiel mit einem perDOMParsererzeugten Dokument oder einem iframe-Dokument. Ob es das aktuelle Dokument ist, prüft man zusätzlich mitnode.ownerDocument === document. document.isConnectedselbst ist immertrue. EinDocumentFragmentund die Knoten darin liefernfalse.- Kompatibilität: Unterstützt in Chrome/Edge 54+, Firefox 49+ und Safari 10+. Im Internet Explorer fehlt die Eigenschaft; als Ersatz dient
document.documentElement.contains(node), das aber Shadow DOM nicht berücksichtigt.