Start · Sprachen · JavaScript · Referenz · String.prototype.strike()

String.prototype.strike()

Methode

Gibt einen neuen String zurück, der den Ausgangsstring in ein <code>&lt;strike&gt;</code>-Element einbettet, sodass er durchgestrichen dargestellt wird.

seit JavaScript ES2015 (Annex B, veraltet) – in allen Browsern und deprecated seit ja Kategorie: method-property

Signatur

String.prototype.strike()

Beschreibung

strike() gehört zu den sogenannten HTML-Wrapper-Methoden von String. Die Methode umschließt den String mit <strike> und </strike> und gibt das Ergebnis als neuen String zurück. So wird aus "Alt" der String "<strike>Alt</strike>". Der ursprüngliche String bleibt unverändert, da Strings in JavaScript unveränderlich sind.

Die Methode stammt aus der Anfangszeit von JavaScript, als HTML oft per String-Verkettung und document.write() erzeugt wurde. Sie ist in ECMAScript nur noch im Anhang B („Legacy-Features für Webbrowser“) definiert und gilt als veraltet. Auch das Element <strike> selbst ist in HTML5 obsolet.

In neuem Code nimmt man stattdessen das semantische Element <s> (nicht mehr zutreffender Inhalt) oder <del> (gelöschter Inhalt), erzeugt über DOM-Methoden wie document.createElement(), oder man setzt die CSS-Eigenschaft text-decoration: line-through. strike() ist heute im Grunde nur noch wichtig, um alten Code zu verstehen oder zu migrieren.

Rückgabewert

Typ
string
Beschreibung
Ein neuer String der Form <strike>…</strike>, der den ursprünglichen String unverändert (ohne Escaping) enthält.

Beispiele

Grundlegende Verwendung

const preis = "49,99 €";
const markup = preis.strike();
console.log(markup);
console.log(preis); // Original bleibt unverändert
<strike>49,99 €</strike> 49,99 €

Legacy-Code: alter Preis im Warenkorb

const artikel = { name: "Kopfhörer", alt: 89, neu: 59 };

// Alter Stil (veraltet)
const html = `${artikel.name}: ${String(artikel.alt + " €").strike()} ${artikel.neu} €`;
console.log(html);
Kopfhörer: <strike>89 €</strike> 59 €

Moderne Alternative mit DOM und <s>

const zeigePreis = (container, alt, neu) => {
  const s = document.createElement("s");
  s.textContent = `${alt} €`; // textContent escapt automatisch
  container.append(s, ` ${neu} €`);
};

zeigePreis(document.querySelector("#preis"), 89, 59);
console.log(document.querySelector("#preis").innerHTML);
<s>89 €</s> 59 €

Fallstrick: kein Escaping von HTML

const eingabe = "<img src=x onerror=alert(1)>";
console.log(eingabe.strike());
<strike><img src=x onerror=alert(1)></strike>

// Wichtig · Fallstricke

  • Veraltet: strike() ist nur in Anhang B der ECMAScript-Spezifikation definiert. Alle Browser und Node.js unterstützen die Methode noch aus Kompatibilitätsgründen. Für neuen Code solltest du sie nicht mehr verwenden.
  • Obsoletes Element: <strike> ist in HTML5 nicht mehr gültig. Nimm stattdessen <s>, <del> oder CSS mit text-decoration: line-through.
  • Sicherheit (XSS): Die Methode escapt den Inhalt nicht. Wenn Nutzereingaben mit strike() umschlossen und dann per innerHTML oder document.write() eingefügt werden, kann Schadcode ausgeführt werden. Setze Text lieber über textContent ein.
  • Bei null oder undefined als this (z. B. String.prototype.strike.call(null)) wird ein TypeError ausgelöst. Andere Werte werden vorher in einen String umgewandelt.
  • Die Methode hat keine Parameter. Übergebene Argumente werden ignoriert.