Start · Sprachen · JavaScript · Referenz · HTMLAnchorElement.toString()

HTMLAnchorElement.toString()

Methode

Gibt die vollständige, aufgelöste URL eines <code>&lt;a&gt;</code>-Elements als String zurück, also denselben Wert wie <code>href</code>.

seit JavaScript Baseline: alle Browser Kategorie: webapi

Signatur

HTMLAnchorElement.prototype.toString()

Beschreibung

Die Methode toString() von HTMLAnchorElement ist ein sogenannter Stringifier: Sie liefert die vollständige, absolut aufgelöste URL des Links und gibt dabei exakt denselben Wert zurück wie die Eigenschaft HTMLAnchorElement.href. Relative Angaben im href-Attribut, etwa /kontakt, werden anhand der Basis-URL des Dokuments (bzw. eines <base>-Elements) zu einer vollständigen URL aufgelöst.

Weil es sich um einen Stringifier handelt, wird die Methode immer dann automatisch aufgerufen, wenn ein Link-Element in einen String umgewandelt wird: bei Template-Literalen, bei der Verkettung mit +, bei String(link) oder wenn das Element an APIs übergeben wird, die einen String erwarten, zum Beispiel new URL(link) oder fetch(link).

In der Praxis schreibt man meist direkt link.href, weil das lesbarer ist. toString() ist vor allem nützlich, weil Link-Elemente sich dadurch ohne Umweg in String-Kontexten verwenden lassen. Das gleiche Verhalten gibt es auch bei HTMLAreaElement, URL und Location.

Rückgabewert

Typ
string
Beschreibung
Die vollständige, aufgelöste URL des Links, identisch mit HTMLAnchorElement.href. Hat das Element kein href-Attribut, ist das Ergebnis ein leerer String "".

Beispiele

Relative URL auflösen

// Angenommen, die Seite liegt unter https://example.com/blog/artikel.html
const link = document.createElement('a');
link.setAttribute('href', '../kontakt?ref=blog#formular');

console.log(link.toString());
console.log(link.getAttribute('href')); // Rohwert des Attributs
console.log(link.toString() === link.href);
https://example.com/kontakt?ref=blog#formular ../kontakt?ref=blog#formular true

Automatische Umwandlung in String-Kontexten

const link = document.createElement('a');
link.href = 'https://example.com/docs/api';

// Template-Literal und String() rufen toString() implizit auf
console.log(`Ziel: ${link}`);
console.log(String(link));

// Das Element lässt sich direkt an den URL-Konstruktor übergeben
const url = new URL(link);
console.log(url.pathname);
Ziel: https://example.com/docs/api https://example.com/docs/api /docs/api

Alle externen Links einer Seite sammeln

const externeLinks = [...document.querySelectorAll('a[href]')]
  .map((a) => a.toString())
  .filter((href) => new URL(href).origin !== location.origin);

console.log(`Externe Links: ${externeLinks.length}`);
console.table(externeLinks);
Externe Links: 3

Link-Ziel per fetch vorab laden

const link = document.querySelector('a.vorschau');

const ladeVorschau = async () => {
  // fetch wandelt das Element per toString() in die URL um
  const response = await fetch(link, { method: 'HEAD' });
  console.log(`${link} → Status ${response.status}`);
};

ladeVorschau();
https://example.com/produkt/42 → Status 200

// Wichtig · Fallstricke

  • Kein Attribut, leerer String: Fehlt das href-Attribut, liefert toString() den Wert "". Ein Aufruf wie new URL(link) wirft dann einen TypeError. Prüfe das vorher mit link.hasAttribute('href').
  • Nicht aufrufbarer Rohwert: Kann der Wert nicht als URL aufgelöst werden (z. B. http://[ungültig), gibt toString() den Rohwert des Attributs unverändert zurück.
  • Attribut und aufgelöster Wert unterscheiden sich: Den ursprünglich im HTML angegebenen Wert erhältst du nur über getAttribute('href'). toString() und href liefern immer die aufgelöste, normalisierte Form, etwa mit Prozent-Kodierung und kleingeschriebenem Hostnamen.
  • Sicherheit: Die URL kann auch das Schema javascript: oder data: haben. Bevor du eine solche URL weiterverwendest, etwa in location.href oder window.open(), solltest du das Protokoll prüfen (new URL(href).protocol). Sonst drohen XSS-Lücken.
  • SVG-Links: <a>-Elemente innerhalb von SVG sind SVGAElement. Ihr toString() liefert "[object SVGAElement]" und nicht die URL.
  • Kompatibilität: Wird von allen modernen Browsern seit Langem unterstützt. In Node.js gibt es die Methode nur mit einer DOM-Implementierung wie jsdom.