Start · Sprachen · JavaScript · Referenz · SVGImageElement.href

SVGImageElement.href

Eigenschaft

Liefert ein schreibgeschütztes <code>SVGAnimatedString</code>-Objekt, das das <code>href</code>- bzw. <code>xlink:href</code>-Attribut eines SVG-<code>&lt;image&gt;</code>-Elements widerspiegelt.

seit JavaScript Baseline: alle Browser Kategorie: webapi

Signatur

SVGImageElement.href

Beschreibung

Die Eigenschaft href des SVGImageElement-Interfaces stammt aus dem Mixin SVGURIReference. Sie gibt die Bildquelle eines <image>-Elements in SVG zurück, allerdings nicht als einfachen String, sondern als SVGAnimatedString-Objekt.

Die Eigenschaft selbst ist schreibgeschützt: Das Objekt kann man nicht durch ein anderes ersetzen. Die URL lässt sich trotzdem ändern, und zwar über href.baseVal. Diese Eigenschaft ist beschreibbar und entspricht direkt dem Attributwert. href.animVal enthält den aktuell animierten Wert, zum Beispiel während einer SMIL-Animation mit <set> oder <animate>. Ohne laufende Animation ist er gleich baseVal.

Nach SVG 2 spiegelt die Eigenschaft das moderne Attribut href wider. Fehlt es, greift sie auf das alte xlink:href zurück. Brauchbar ist das, wenn man Bildquellen in SVG-Grafiken per Skript lesen oder austauschen will, zum Beispiel für Themenwechsel, Vorschaubilder oder Lazy Loading in Diagrammen.

Rückgabewert

Typ
SVGAnimatedString
Beschreibung
Ein Objekt mit den Eigenschaften baseVal (string, beschreibbar: der Attributwert) und animVal (string, schreibgeschützt: der aktuell animierte Wert).

Beispiele

Bildquelle eines SVG-image auslesen

// <svg><image id="logo" href="/img/logo.png" width="100" height="50"/></svg>
const img = document.querySelector('#logo');

console.log(img.href instanceof SVGAnimatedString);
console.log(img.href.baseVal);
console.log(img.href.animVal);
true /img/logo.png /img/logo.png

Bild per Skript austauschen (z. B. Dark Mode)

const logo = document.querySelector('#logo');

const setTheme = (dark) => {
  // Nicht img.href = '...' (wirkungslos), sondern baseVal setzen
  logo.href.baseVal = dark ? '/img/logo-dark.png' : '/img/logo.png';
};

const mq = window.matchMedia('(prefers-color-scheme: dark)');
setTheme(mq.matches);
mq.addEventListener('change', (e) => setTheme(e.matches));

console.log(logo.getAttribute('href'));
/img/logo-dark.png (bei aktivem Dark Mode)

image-Element dynamisch erzeugen und auf das Laden warten

const SVG_NS = 'http://www.w3.org/2000/svg';
const svg = document.querySelector('svg');

const loadSvgImage = (url, w, h) => new Promise((resolve, reject) => {
  const image = document.createElementNS(SVG_NS, 'image');
  image.setAttribute('width', w);
  image.setAttribute('height', h);
  image.addEventListener('load', () => resolve(image), { once: true });
  image.addEventListener('error', () => reject(new Error(`Fehler: ${url}`)), { once: true });
  image.href.baseVal = url;
  svg.append(image);
});

const image = await loadSvgImage('/img/karte.png', 300, 200);
console.log('Geladen:', image.href.baseVal);
Geladen: /img/karte.png

Altes xlink:href-Attribut auslesen

// <image id="alt" xlink:href="foto.jpg" width="80" height="80"/>
const XLINK_NS = 'http://www.w3.org/1999/xlink';
const alt = document.querySelector('#alt');

console.log(alt.href.baseVal);
console.log(alt.getAttributeNS(XLINK_NS, 'href'));
foto.jpg foto.jpg

// Wichtig · Fallstricke

  • Häufiger Fehler: img.href = 'neu.png' bewirkt nichts (im Strict Mode wird ein TypeError geworfen), weil die Eigenschaft schreibgeschützt ist. Setze stattdessen img.href.baseVal oder nutze setAttribute('href', …).
  • Anders als bei HTMLImageElement.src wird der Wert nicht zu einer absoluten URL aufgelöst: baseVal liefert den Attributwert genau so, wie er im Markup steht.
  • Ein SVGAnimatedString wird bei Ausgabe oder Vergleich nicht automatisch in einen String umgewandelt. img.href === '/img/logo.png' ist deshalb immer false.
  • xlink:href gilt seit SVG 2 als veraltet. Für neuen Code verwendest du nur href. Sehr alte Browser (z. B. Safari vor 12) kennen nur xlink:href. Sind beide Attribute gesetzt, hat href Vorrang.
  • Die Eigenschaft wird von allen modernen Browsern unterstützt. Bilder aus anderen Quellen unterliegen der CSP-Direktive img-src. Wird das SVG in ein <canvas> gezeichnet, gelten CORS-Regeln, und ein fremdes Bild kann die Canvas „verunreinigen“ (tainted canvas).