Signatur
Beschreibung
Die schreibgeschützte Eigenschaft nextElementSibling ist auf allen Knoten verfügbar, die von CharacterData erben, also auf Text, Comment, CDATASection und ProcessingInstruction. Sie gibt das erste Element zurück, das dem Knoten in der Kindliste seines Elternknotens folgt. Text- und Kommentarknoten dazwischen werden übersprungen.
Anders als nextSibling, das jeden beliebigen Knotentyp liefert (oft einen Whitespace-Textknoten aus dem HTML-Quelltext), bekommst du hier direkt das nächste HTML- bzw. XML-Element. Das ist vor allem dann nützlich, wenn du von einem Textknoten oder Kommentar aus auf das folgende Element zugreifen willst, z. B. bei Kommentar-Markierungen im Markup, Template-Platzhaltern oder beim Durchlaufen von Textknoten mit einem TreeWalker.
Gibt es kein folgendes Element-Geschwister oder hat der Knoten keinen Elternknoten, ist der Wert null. Die Eigenschaft ist „live“: Sie spiegelt immer den aktuellen Zustand des DOM wider.
Rückgabewert
Element in Dokumentreihenfolge oder null, wenn keines existiert.Beispiele
Vom Textknoten zum nächsten Element springen
const p = document.createElement('p');
p.innerHTML = 'Hallo <strong>Welt</strong> und <em>mehr</em>';
const text = p.firstChild; // Textknoten "Hallo "
console.log(text.nodeType === Node.TEXT_NODE);
console.log(text.nextSibling.nodeName); // direkt nachfolgender Knoten
console.log(text.nextElementSibling.tagName); // nächstes Element
Whitespace-Textknoten überspringen – Unterschied zu nextSibling
const ul = document.createElement('ul');
ul.innerHTML = `
<li>Eins</li>
<li>Zwei</li>
`;
const ersterText = ul.firstChild; // Zeilenumbruch + Leerzeichen
console.log(JSON.stringify(ersterText.data));
console.log(ersterText.nextSibling.textContent);
console.log(ersterText.nextElementSibling.textContent);
Kommentar-Marker als Anker für das folgende Element
const container = document.createElement('div');
container.innerHTML = '<!-- slot:header --> <h2>Titel</h2><p>Text</p>';
const findeNachMarker = (root, name) => {
const walker = document.createTreeWalker(root, NodeFilter.SHOW_COMMENT);
while (walker.nextNode()) {
const kommentar = walker.currentNode;
if (kommentar.data.trim() === `slot:${name}`) {
return kommentar.nextElementSibling;
}
}
return null;
};
console.log(findeNachMarker(container, 'header')?.outerHTML);
console.log(findeNachMarker(container, 'footer'));
null am Ende der Kindliste oder ohne Elternknoten
const div = document.createElement('div');
div.innerHTML = '<span>A</span>Ende';
console.log(div.lastChild.nextElementSibling);
const losgeloest = document.createTextNode('frei');
console.log(losgeloest.nextElementSibling);
// Wichtig · Fallstricke
- Schreibgeschützt: Eine Zuweisung wie
text.nextElementSibling = elwird ignoriert (im Strict Mode kein Fehler, da nur Getter auf dem Prototyp – der Wert ändert sich einfach nicht). Zum Einfügenafter(),before()oderinsertBefore()verwenden. - Nicht auf allen Knoten:
Document,DocumentFragmentundAttrbesitzen die Eigenschaft nicht;DocumentTypeebenfalls nicht (nurElementundCharacterDataimplementieren sie). - Kein Gegenstück „previous…“-Fehler: Für die Gegenrichtung gibt es
previousElementSibling. - Kompatibilität: In allen modernen Browsern unterstützt. Sehr alte Browser (Internet Explorer bis Version 11, ältere Safari-Versionen) kannten die Eigenschaft nur auf
Element, nicht auf Text- oder Kommentarknoten – dort liefert sieundefined. Falls das relevant ist, per Schleife übernextSiblingmit Prüfung aufnodeType === 1nachbilden. - Die Eigenschaft ist live und kostet praktisch nichts; für viele Aufrufe auf großen Bäumen ist aber ein
TreeWalkermitSHOW_ELEMENToft übersichtlicher.