Start · Sprachen · JavaScript · Referenz · MathMLAnchorElement.hash

MathMLAnchorElement.hash

Eigenschaft

Liest oder setzt den Fragmentbezeichner (<code>#abschnitt</code>) der URL im <code>href</code>-Attribut eines MathML-<code>&lt;a&gt;</code>-Elements.

seit JavaScript Experimentell: nur wenige Browser (Unterstützung v Kategorie: webapi

Signatur

MathMLAnchorElement.hash

Beschreibung

Die Eigenschaft hash der Schnittstelle MathMLAnchorElement gibt einen String zurück, der aus einem # und dem Fragmentbezeichner der URL im href-Attribut besteht, zum Beispiel "#satz-2". Das Fragment wird dabei nicht dekodiert, Prozentkodierungen wie %C3%A4 bleiben also erhalten.

Die Eigenschaft funktioniert genauso wie HTMLAnchorElement.hash und URL.hash. Sie ist nützlich, wenn Links innerhalb von MathML-Formeln (etwa Verweise auf Gleichungen, Definitionen oder Fußnoten) per Skript ausgewertet oder umgeschrieben werden sollen, ohne die ganze URL selbst zu zerlegen.

Die Eigenschaft ist beschreibbar: Wenn du einen neuen Wert zuweist, wird das href-Attribut aktualisiert. Ein führendes # ist optional und wird bei Bedarf ergänzt. Hat die URL kein Fragment oder nur ein leeres ("…#"), ist der Rückgabewert der leere String "".

Parameter

Name Typ Default Beschreibung
$value string Nur beim Setzen: neuer Fragmentbezeichner, mit oder ohne führendes #. Ein leerer String entfernt das Fragment aus href.

Rückgabewert

Typ
string
Beschreibung
Das Fragment einschließlich führendem # oder "", wenn kein bzw. ein leeres Fragment vorhanden ist.

Beispiele

Fragment eines MathML-Links auslesen

const MATHML_NS = 'http://www.w3.org/1998/Math/MathML';

if ('MathMLAnchorElement' in window) {
  const link = document.createElementNS(MATHML_NS, 'a');
  link.setAttribute('href', 'https://example.com/analysis.html#satz-2');
  console.log(link.hash);
} else {
  console.log('MathMLAnchorElement wird nicht unterstützt');
}
#satz-2

Fragment setzen, um auf eine andere Gleichung zu verweisen

const MATHML_NS = 'http://www.w3.org/1998/Math/MathML';
const link = document.createElementNS(MATHML_NS, 'a');
link.setAttribute('href', 'https://example.com/skript.html#gl-1');

// '#' ist optional
link.hash = 'gl-7';
console.log(link.getAttribute('href'));

// Fragment entfernen
link.hash = '';
console.log(link.getAttribute('href'));
https://example.com/skript.html#gl-7 https://example.com/skript.html

Alle Formel-Links auf Gleichungsverweise prüfen

// Beispiel-Markup: <math><a href="#gl-3"><mi>E</mi></a></math>
const links = document.querySelectorAll('math a[href]');

for (const link of links) {
  // Fallback über URL, falls MathMLAnchorElement fehlt
  const hash = 'hash' in link
    ? link.hash
    : new URL(link.getAttribute('href'), document.baseURI).hash;

  if (hash.startsWith('#gl-')) {
    const ziel = document.getElementById(decodeURIComponent(hash.slice(1)));
    console.log(hash, ziel ? 'Ziel gefunden' : 'Ziel fehlt');
  }
}
#gl-3 Ziel gefunden

// Wichtig · Fallstricke

  • Browser-Unterstützung: MathMLAnchorElement ist neu und experimentell. Viele Browser liefern für MathML-<a> nur ein allgemeines MathMLElement ohne hash. Prüfe die Unterstützung vor der Nutzung ('MathMLAnchorElement' in window) und greife sonst auf new URL(href, document.baseURI).hash zurück.
  • Der Rückgabewert ist prozentkodiert. Wenn du damit ein Element per getElementById() suchst, dekodiere ihn vorher mit decodeURIComponent().
  • Ein href nur mit # (leeres Fragment) liefert "", genau wie ein href ohne Fragment. Beide Fälle lassen sich über hash nicht unterscheiden.
  • Ist href keine gültige URL oder fehlt es, liefert hash "", und das Setzen hat keine Wirkung.
  • Wird hash gesetzt, ändert sich nur das href-Attribut. Das löst keine Navigation und kein hashchange-Ereignis aus. Dafür ist location.hash zuständig.