Signatur
Beschreibung
outerText ist eine Eigenschaft der Schnittstelle HTMLElement und kann gelesen und geschrieben werden. Beim Lesen liefert sie exakt denselben Wert wie HTMLElement.innerText: den Text so, wie er dargestellt wird. CSS wird also berücksichtigt, ausgeblendete Inhalte (display: none) fehlen und Blockelemente sowie <br> werden zu Zeilenumbrüchen.
Beim Schreiben unterscheidet sich outerText grundlegend von innerText. Ersetzt wird nicht nur der Inhalt, sondern das Element selbst, einschließlich seines öffnenden und schließenden Tags. Übrig bleiben Textknoten, wobei Zeilenumbrüche (\n, \r) zu <br>-Elementen werden. Anschließend werden benachbarte Textknoten zusammengeführt.
Typische Einsätze: ein Element „auspacken“ und nur seinen Text stehen lassen, etwa um Hervorhebungen wie <mark> oder <span class="badge"> zu entfernen, oder einen Platzhalter durch reinen Text ersetzen. Der zugewiesene Wert wird nie als HTML ausgewertet, daher ist das auch mit Benutzereingaben unbedenklich.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $value | string | Nur beim Schreiben: Der Text, der das Element vollständig ersetzt. Zeilenumbrüche werden zu <br>. Andere Werte werden in einen String umgewandelt (null wird zu ""). |
Rückgabewert
innerText. Ist das Element nicht gerendert (z. B. nicht im Dokument oder mit display: none), entspricht der Wert dem von textContent.Beispiele
Lesen: gleicher Wert wie innerText
// HTML: <p id="hinweis">Hallo <strong>Welt</strong><span hidden>geheim</span></p>
const p = document.querySelector('#hinweis');
console.log(p.outerText);
console.log(p.outerText === p.innerText);
Hervorhebungen entfernen (Element auspacken)
// HTML: <p id="text">Suche nach <mark>JavaScript</mark> und <mark>DOM</mark>.</p>
const absatz = document.querySelector('#text');
// Jedes <mark> wird durch seinen reinen Text ersetzt
absatz.querySelectorAll('mark').forEach((mark) => {
mark.outerText = mark.innerText;
});
console.log(absatz.innerHTML);
console.log(absatz.childNodes.length); // Textknoten wurden zusammengeführt
Unterschied zu innerText beim Schreiben
const box = document.createElement('div');
box.innerHTML = '<span id="a">alt</span> | <span id="b">alt</span>';
document.body.append(box);
box.querySelector('#a').innerText = 'neu'; // nur der Inhalt
box.querySelector('#b').outerText = 'Zeile 1\nZeile 2'; // ganzes Element
console.log(box.innerHTML);
Fehler bei Elementen ohne Elternknoten
const span = document.createElement('span');
try {
span.outerText = 'Text';
} catch (err) {
console.log(err.name);
}
// Wichtig · Fallstricke
- Das Element verschwindet: Nach dem Schreiben verweist die Variable weiterhin auf das nun abgelöste Element. Weitere Änderungen daran wirken sich nicht mehr auf die Seite aus.
- Kein Elternknoten: Hat das Element keinen Elternknoten (z. B. frisch mit
createElementerzeugt), wirft das Schreiben eineDOMExceptionvom TypNoModificationAllowedError. - Performance: Wie
innerTextbraucht das Lesen aktuelle Layoutinformationen und kann einen Reflow auslösen. In Schleifen mit vielen Elementen isttextContentdeutlich schneller, wenn CSS keine Rolle spielt. - Sicherheit: Der zugewiesene Wert wird nicht als HTML interpretiert. Anders als bei
outerHTMLbesteht deshalb kein XSS-Risiko. - Kompatibilität: Chromium und Safari unterstützen die Eigenschaft seit Langem, Firefox erst ab Version 98 (2022). Sehr alte Firefox-Versionen liefern
undefined. Seit 2022 ist die Eigenschaft im HTML Living Standard festgelegt.