Signatur
Beschreibung
HTMLSpanElement ist die DOM-Schnittstelle für das HTML-Element <span>. Das ist ein allgemeiner Inline-Container ohne eigene Bedeutung. Man nutzt ihn, um Textteile für Styling, Skripte oder Datenattribute zu markieren, zum Beispiel für Hervorhebungen, Badges, Zähler oder dynamisch aktualisierte Werte.
Die Schnittstelle definiert keine eigenen Eigenschaften oder Methoden. Alles kommt aus der Vererbungskette HTMLElement → Element → Node → EventTarget. Dazu gehören etwa textContent, classList, dataset, style, hidden und addEventListener().
Ein HTMLSpanElement erstellt man mit document.createElement('span'). Einen direkten Konstruktoraufruf (new HTMLSpanElement()) gibt es nicht. Mit instanceof HTMLSpanElement prüft man zur Laufzeit, ob ein Knoten wirklich ein <span> ist. Das ist nützlich bei Typprüfungen, bei der Ereignisdelegation und in TypeScript.
Rückgabewert
document.createElement('span') oder durch Abfragen des DOM, z. B. mit querySelector('span').Beispiele
Span erzeugen und einfügen
const badge = document.createElement('span');
badge.textContent = 'Neu';
badge.classList.add('badge', 'badge--info');
badge.dataset.status = 'new';
document.querySelector('h2')?.append(' ', badge);
console.log(badge instanceof HTMLSpanElement);
console.log(badge.outerHTML);
Live-Zähler in einem Span aktualisieren
// HTML: <p>Warenkorb: <span id="cart-count">0</span> Artikel</p>
const counter = document.getElementById('cart-count');
const addToCart = () => {
const current = Number(counter.textContent);
counter.textContent = String(current + 1);
};
addToCart();
addToCart();
console.log(counter.textContent);
Typprüfung bei Ereignisdelegation
// Klicks auf Schlagwort-Spans in einer Liste abfangen
document.querySelector('#tags')?.addEventListener('click', (event) => {
const target = event.target;
if (target instanceof HTMLSpanElement && target.dataset.tag) {
console.log(`Filter nach: ${target.dataset.tag}`);
target.classList.toggle('active');
}
});
Suchbegriff sicher hervorheben
const highlight = (container, text, term) => {
container.replaceChildren();
const parts = text.split(term);
parts.forEach((part, i) => {
container.append(part); // als Text eingefügt, kein HTML
if (i < parts.length - 1) {
const mark = document.createElement('span');
mark.className = 'hit';
mark.textContent = term;
container.append(mark);
}
});
};
const p = document.createElement('p');
highlight(p, 'JavaScript und Java', 'Java');
console.log(p.innerHTML);
// Wichtig · Fallstricke
- Keine eigene Semantik:
<span>hat für Screenreader keine Bedeutung. Für Hervorhebungen besser<strong>,<em>oder<mark>verwenden. Klickbare Spans brauchenrole="button",tabindex="0"und eine Tastaturbedienung. Noch besser ist gleich ein<button>. - Kein Konstruktor:
new HTMLSpanElement()wirft einenTypeError(„Illegal constructor“). Stattdessendocument.createElement('span')verwenden. - XSS: Nutzereingaben immer über
textContentsetzen, nicht überinnerHTML. - Inline-Element:
widthundheightwirken erst mitdisplay: inline-blockoderblock. - Kompatibilität: Wird von allen Browsern unterstützt. Sehr alte Browser lieferten für
<span>teils nur einHTMLElement, heute spielt das keine Rolle mehr.