Start · Sprachen · JavaScript · Referenz · SVGAElement.pathname

SVGAElement.pathname

Eigenschaft

Liest oder setzt den Pfadanteil (z. B. <code>/docs/index.html</code>) der Ziel-URL eines SVG-<code>&lt;a&gt;</code>-Elements.

seit JavaScript SVG 2 (über HTMLHyperlinkElementUtils) – Browser-U Kategorie: webapi

Signatur

SVGAElement.pathname

Beschreibung

Die Eigenschaft pathname eines SVGAElement gibt den Pfadanteil der Ziel-URL des Links als Zeichenkette zurück: Er beginnt mit einem Schrägstrich / und endet vor Suchanteil (?…) und Fragment (#…). Bei https://example.com/shop/artikel.html?id=5#bewertung ist der Wert also "/shop/artikel.html".

Die Eigenschaft gehört zu den URL-Zerlegungseigenschaften, die SVG 2 aus der HTML-Mixin-Schnittstelle HTMLHyperlinkElementUtils übernimmt. Sie funktioniert also genauso wie HTMLAnchorElement.pathname. Grundlage ist das Attribut href bzw. das ältere xlink:href. Relative Angaben werden gegen die Basis-URL des Dokuments aufgelöst.

Wenn du pathname setzt, wird das href-Attribut des Elements mit dem neuen Pfad neu geschrieben. Protokoll, Host, Suchanteil und Fragment bleiben dabei erhalten. Das eignet sich gut für interaktive SVG-Grafiken wie Karten oder Diagramme, deren Links du per Skript anpassen oder auswerten willst, etwa für Routing in einer Single-Page-App.

Parameter

Name Typ Default Beschreibung
$wert (beim Setzen) string Neuer Pfad, z. B. "/produkte/neu". Fehlt der führende /, wird er ergänzt. Sonderzeichen werden prozentkodiert.

Rückgabewert

Typ
string
Beschreibung
Der Pfadanteil der aufgelösten Link-URL, beginnend mit /. Ist href leer oder ungültig, erhältst du eine leere Zeichenkette "".

Beispiele

Pfad eines SVG-Links auslesen (mit Rückfalllösung)

// <svg><a id="link" href="https://example.com/shop/artikel.html?id=5#bewertung"><text y="20">Artikel</text></a></svg>
const link = document.querySelector('#link');

const getPathname = (a) => {
  if (typeof a.pathname === 'string') return a.pathname;
  // Rückfalllösung für Browser ohne Unterstützung
  const href = a.href?.baseVal ?? a.getAttribute('href') ?? '';
  return new URL(href, document.baseURI).pathname;
};

console.log(getPathname(link));
/shop/artikel.html

Pfad setzen, Suchanteil und Fragment bleiben erhalten

const link = document.querySelector('svg a');
link.setAttribute('href', 'https://example.com/alt/seite?lang=de#top');

if ('pathname' in link) {
  link.pathname = '/neu/seite';
} else {
  const url = new URL(link.getAttribute('href'), document.baseURI);
  url.pathname = '/neu/seite';
  link.setAttribute('href', url.href);
}

console.log(link.getAttribute('href'));
https://example.com/neu/seite?lang=de#top

Clientseitiges Routing für Klicks in einer SVG-Karte

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

karte.addEventListener('click', (event) => {
  const a = event.target.closest('a');
  if (!a) return;
  const href = a.href?.baseVal ?? a.getAttribute('href');
  const url = new URL(href, document.baseURI);

  // Nur interne Links selbst behandeln
  if (url.origin === location.origin && url.pathname.startsWith('/region/')) {
    event.preventDefault();
    history.pushState({}, '', url.pathname + url.search);
    console.log('Lade Region:', url.pathname.split('/')[2]);
  }
});
Lade Region: bayern

// Wichtig · Fallstricke

  • Browser-Kompatibilität: Die URL-Zerlegungseigenschaften von SVGAElement (pathname, host, search usw.) sind neu in SVG 2 und in vielen Browsern gar nicht oder nur teilweise umgesetzt. Prüfe vorher mit 'pathname' in element, ob die Eigenschaft vorhanden ist, und nutze sonst new URL(...) als Rückfalllösung.
  • Anders als bei HTML ist SVGAElement.href keine Zeichenkette, sondern ein SVGAnimatedString. Die URL steckt in href.baseVal bzw. href.animVal.
  • Relative Pfade werden gegen document.baseURI aufgelöst. Bei eingebetteten SVG-Dateien (<object>, <iframe>) ist das die URL der SVG-Datei, nicht die der einbettenden Seite.
  • Der Wert ist prozentkodiert: Aus Leerzeichen wird %20. Zum Anzeigen gegebenenfalls decodeURIComponent() verwenden.
  • Bei Nicht-HTTP-URLs wie mailto: oder javascript: ist der Pfad kein hierarchischer Pfad. Diese Links nicht blind als interne Routen behandeln.