Signatur
Beschreibung
Die Eigenschaft href der Schnittstelle MathMLAnchorElement spiegelt das href-Attribut eines <a>-Elements im MathML-Namensraum (http://www.w3.org/1998/Math/MathML) wider. Sie ist ein Stringifier: Wird das Element in einen String umgewandelt, etwa durch Template-Literale oder String(element), kommt genau dieser Wert heraus.
Anders als getAttribute("href") liefert die Eigenschaft nicht den Rohwert, sondern die gegen die Basis-URL des Dokuments aufgelöste absolute URL. Aus einem relativen Wert wie "formeln/pythagoras.html" wird so zum Beispiel "https://example.com/formeln/pythagoras.html". Fehlt das Attribut, ist der Rückgabewert ein leerer String "".
Nützlich ist die Eigenschaft, wenn Formelteile in MathML-Ausdrücken als Links dienen, etwa ein Symbol, das auf seine Definition verweist, und du diese Links per Skript prüfen, protokollieren oder umschreiben möchtest. Weist du der Eigenschaft einen Wert zu, wird das href-Attribut entsprechend gesetzt.
Rückgabewert
href-Attribut, oder "", wenn das Attribut fehlt.Beispiele
MathML-Link erzeugen und absolute URL auslesen
const MATHML_NS = "http://www.w3.org/1998/Math/MathML";
const math = document.createElementNS(MATHML_NS, "math");
const link = document.createElementNS(MATHML_NS, "a");
const mi = document.createElementNS(MATHML_NS, "mi");
mi.textContent = "π";
link.setAttribute("href", "/konstanten/pi");
link.append(mi);
math.append(link);
document.body.append(math);
// Angenommen, die Seite läuft unter https://example.com/artikel/
console.log(link.getAttribute("href")); // Rohwert
console.log(link.href); // aufgelöste URL
Stringifier-Verhalten und fehlendes Attribut
const MATHML_NS = "http://www.w3.org/1998/Math/MathML";
const link = document.createElementNS(MATHML_NS, "a");
console.log(JSON.stringify(link.href)); // noch kein href gesetzt
link.setAttribute("href", "https://de.wikipedia.org/wiki/Eulersche_Zahl");
console.log(`Link-Ziel: ${link}`); // Stringifier liefert href
Alle Formel-Links prüfen, mit Fallback
const MATHML_NS = "http://www.w3.org/1998/Math/MathML";
const getMathHref = (el) =>
"MathMLAnchorElement" in window && el instanceof MathMLAnchorElement
? el.href
: new URL(el.getAttribute("href") ?? "", document.baseURI).href;
const links = document.getElementsByTagNameNS(MATHML_NS, "a");
for (const link of links) {
if (!link.hasAttribute("href")) continue;
const url = new URL(getMathHref(link));
if (url.origin !== location.origin) {
console.log("Externer Formel-Link:", url.href);
}
}
// Wichtig · Fallstricke
- Kompatibilität:
MathMLAnchorElementist experimentell und wird noch nicht in allen Browsern unterstützt. Prüfe die Verfügbarkeit mit"MathMLAnchorElement" in windowund greife sonst aufgetAttribute("href")zusammen mitnew URL(wert, document.baseURI)zurück. - Das Element muss im MathML-Namensraum erzeugt werden (
createElementNS).document.createElement("a")liefert einHTMLAnchorElement, kein MathML-Element. hrefgibt die aufgelöste URL zurück,getAttribute("href")dagegen den Rohwert. Beim Vergleichen oder Umschreiben von Links solltest du die beiden nicht verwechseln.- Sicherheit: Werte wie
javascript:-URLs werden nicht gefiltert. Übernimm Link-Ziele aus Benutzereingaben niemals ungeprüft, sonst drohen XSS-Angriffe. Prüfe vorher das Protokoll (new URL(...).protocol).