Start · Sprachen · JavaScript · Referenz · new Text()

new Text()

Methode

Erzeugt einen neuen, noch nicht eingehängten <code>Text</code>-Knoten, dessen Inhalt dem optional übergebenen String entspricht.

seit JavaScript DOM Living Standard · Baseline: alle modernen Brow Kategorie: webapi

Signatur

new Text(data)

Beschreibung

Der Konstruktor new Text() erzeugt einen DOM-Textknoten (nodeType === 3), der zu dem Dokument gehört, dem das aktuelle globale Objekt zugeordnet ist (normalerweise window.document). Das Ergebnis ist gleichwertig mit document.createTextNode(data), ist aber kürzer und passt besser zu modernem, klassenbasiertem Code.

Textknoten eignen sich, um Benutzereingaben oder andere dynamische Zeichenketten sicher ins DOM einzufügen. Der Inhalt wird immer als reiner Text behandelt und nie als HTML ausgewertet. Deshalb sind Textknoten eine gute Alternative zu innerHTML, wenn nur Text gebraucht wird.

Der neue Knoten hängt zunächst nirgends im DOM. Er erscheint erst, wenn man ihn z. B. mit append(), appendChild(), before() oder insertBefore() einfügt. Danach lässt sich der Inhalt über data, nodeValue oder textContent ändern, ohne dass der Knoten neu erzeugt wird. Das ist praktisch für Zähler, Statusanzeigen und Ähnliches.

Parameter

Name Typ Default Beschreibung
$data string "" Anfänglicher Textinhalt des Knotens. Andere Werte als Strings werden in einen String umgewandelt (z. B. 42 → "42", null → "null"). Ohne Argument ist der Inhalt ein leerer String.

Rückgabewert

Typ
Text
Beschreibung
Ein neuer Text-Knoten, der zum aktuellen document gehört und noch nicht ins DOM eingefügt ist.

Beispiele

Textknoten erzeugen und einfügen

const absatz = document.createElement('p');
const text = new Text('Hallo Welt!');

absatz.append(text);
document.body.append(absatz);

console.log(text.nodeType, text.data, text.parentNode === absatz);
3 Hallo Welt! true

Benutzereingaben sicher anzeigen (ohne XSS)

const eingabe = '<img src=x onerror="alert(1)">';
const ausgabe = document.querySelector('#kommentar') ?? document.body;

// Wird als Text angezeigt, nicht als HTML ausgeführt
ausgabe.replaceChildren(new Text(eingabe));

console.log(ausgabe.innerHTML);
&lt;img src=x onerror="alert(1)"&gt;

Live-Zähler: Knoten wiederverwenden statt neu rendern

const label = document.createElement('span');
const zaehlerText = new Text('0');
label.append('Klicks: ', zaehlerText);
document.body.append(label);

let klicks = 0;
document.addEventListener('click', () => {
  zaehlerText.data = String(++klicks); // nur der Textknoten ändert sich
});

Leerer Knoten und Typumwandlung

const leer = new Text();
const zahl = new Text(42);

console.log(JSON.stringify(leer.data), leer.length);
console.log(typeof zahl.data, zahl.data);
console.log(zahl instanceof CharacterData, zahl instanceof Node);
"" 0 string 42 true true

// Wichtig · Fallstricke

  • Dokument-Zuordnung: Der Knoten gehört immer zum Dokument des aktuellen Fensters. Für andere Dokumente (z. B. aus DOMParser oder einem iframe) nimmt man otherDoc.createTextNode(). Man kann den Knoten auch einfach einfügen, dann übernimmt das Zieldokument ihn automatisch (Adoption).
  • Kein HTML: Tags im String werden nicht ausgewertet. Das ist gewollt und schützt vor XSS. Wer Markup braucht, muss Elemente erzeugen.
  • Mehrere benachbarte Textknoten bleiben getrennt, bis man Node.normalize() aufruft. Das kann Code stören, der sich auf childNodes verlässt.
  • Im Gegensatz zu document.createTextNode() ist das Argument hier optional.
  • Kompatibilität: Unterstützt in allen modernen Browsern (Chrome 28+, Firefox 24+, Safari 8+, Edge), nicht im Internet Explorer. In Node.js gibt es den Konstruktor nur über DOM-Implementierungen wie jsdom.