textContent: Text-Inhalt lesen und ändern

textContent ähnelt innerHTML: Es gibt den Inhalt eines Elements zurück oder setzt den Inhalt eines Elements. textContent wird aber nicht als HTML geparst – das schafft Sicherheit gegen XSS und das Element wird schneller aufgebaut.

Javascript textContent HTML Markup als Text lesen und überschreiben

textContent

textContent gibt ein literales Abbild des Inhalts mitsamt Whitespace – Leerzeichen und Zeilenumbrüchen – zurück.

const content = document.querySelector(elem).textContent;

Agiert textContent als Setter, ersetzt elem.textContent den vollständigen Inhalt von elem durch Text – soweit funktioniert textContent genauso wie innerHTML.

document.querySelector(elem).textContent = 'Neuer Inhalt';

textContent vs innerHTML: Sicherheit gegen XSS

Während der Wert von innerHTML als HTML geparst wird, interpretiert Javascript textContent als Text. Der wichtigste Punkt, der für den Einsatz von textContent gegenüber innerHTML spricht, ist die Sicherheit vor XSS.

element.innerHTML = userInput;

Wenn userInput Scriptcode enthält, wird das Skript ausgeführt.

<script>alert(1)</script>

Mit textContent hingegen wird userInput als Text angezeigt, aber nicht als Code ausgeführt.

element.textContent = userInput;

Praktisch: textContent als Zeichenzähler

Wenn ein Eingabefeld – z.B. in einem Support-Formular – begrenzt ist oder das Datenbankfeld limitiert ist, ist ein Zeichenzähler für ein textarea-Element eine praktische Hilfe für den Benutzer. Ohne Zähler führt das Abschneiden des Texts zu Frust.

0 / 2000 Zeichen
const textarea = document.getElementById("message");
const counter  = document.getElementById("counter");
const max      = textarea.maxLength;

function updateCounter() {
  counter.textContent = 
    `${textarea.value.length} / ${max} Zeichen`;
}

textarea.addEventListener("input", updateCounter);
updateCounter(); // Initialwert setzen

innerText

Bei Abfragen gibt innerText den Inhalt eines Elements und all seiner Abkömmlinge ebenfalls als reinen Text zurück. Enthält der Text HTML-Tags, werden sie maskiert. Ist der Text durch CSS ausgeblendet (visibility: hidden oder display: none), wird er nicht ausgegeben.

Wird innerText einem Element zugewiesen, werden alle Inhalte des Elements durch ein einziges Text-Element ersetzt.

Header

Javascript text-content

innerHTML, textContent & innerText

Wird nicht angezeigt oder ist ausgeblendet.

<div id="demo">
   <h4>Header</h4>
   <img src="svg/textcontent.png" width="980" height="588" alt="Javascript text-content">
   <script>const dummy = document.querySelector("time").innerHTML;</script>
   <p>innerHTML, textContent & innerText</p>
   <p>
      <span style="visiblity:hidden">Wird nicht angezeigt</span> 
      <span style="display: none">oder ist ausgeblendet</span>.
   </p>
</div>

…

console.log (document.querySelector("#demo").innerText);
console.log (document.querySelector("#demo").textContent);

innerText gibt genauso wie textContent den Text wörtlich zurück, beide Eigenschaften maskieren Sonderzeichen, aber innerText gibt keinen Inhalt aus <script> und <style> zurück, sondern nur den menschenlesbaren Teil.

innerText

Header


innerHTML, textContent & innerText

textContent

Header
		
		const dummy = document.querySelector("time").innerHTML;
		innerHTML, textContent & innerText

textContent und innerText kamen lange nach dem geliebten innerHTML und sind trotz guter Unterstützung durch alle modernen Browser die kleinen Mauerblümchen unter den Eigenschaften der DOM-Elemente. Dabei sind sie deutlich schneller als innerHTML, denn die eingefügten Zeichenketten werden nicht geparst.

Suchen auf mediaevent.de