Signatur
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
# 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');
}
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'));
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');
}
}
// Wichtig · Fallstricke
- Browser-Unterstützung:
MathMLAnchorElementist neu und experimentell. Viele Browser liefern für MathML-<a>nur ein allgemeinesMathMLElementohnehash. Prüfe die Unterstützung vor der Nutzung ('MathMLAnchorElement' in window) und greife sonst aufnew URL(href, document.baseURI).hashzurück. - Der Rückgabewert ist prozentkodiert. Wenn du damit ein Element per
getElementById()suchst, dekodiere ihn vorher mitdecodeURIComponent(). - Ein
hrefnur mit#(leeres Fragment) liefert"", genau wie einhrefohne Fragment. Beide Fälle lassen sich überhashnicht unterscheiden. - Ist
hrefkeine gültige URL oder fehlt es, lieferthash"", und das Setzen hat keine Wirkung. - Wird
hashgesetzt, ändert sich nur dashref-Attribut. Das löst keine Navigation und keinhashchange-Ereignis aus. Dafür istlocation.hashzuständig.