Signatur
Beschreibung
Die Schnittstelle MathMLAnchorElement steht für Hyperlink-Elemente innerhalb von MathML-Markup, also für ein <a> im MathML-Namensraum (http://www.w3.org/1998/Math/MathML). Damit lassen sich einzelne Teile einer Formel – etwa ein Symbol, eine Variable oder ein ganzer Teilausdruck – anklickbar machen und zum Beispiel auf eine Definition, ein Glossar oder eine Herleitung verlinken.
Die Schnittstelle erbt von MathMLElement (und damit von Element, Node und EventTarget). Sie spiegelt die Link-Attribute als DOM-Eigenschaften wider, ähnlich wie HTMLAnchorElement im HTML-Namensraum:
href– das Linkziel als Zeichenkette (spiegelt das Attributhref).target– der Browsing-Kontext, in dem der Link geöffnet wird (z. B._blank,_self).
Einsetzen solltest du die Schnittstelle, wenn du MathML dynamisch per JavaScript erzeugst oder vorhandene Formel-Links nachträglich anpassen willst (z. B. Linkziele umschreiben, Links in neuem Tab öffnen). Wichtig: Elemente müssen mit document.createElementNS() und dem MathML-Namensraum erzeugt werden – document.createElement("a") erzeugt stets ein HTMLAnchorElement.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $href | string | "" | Eigenschaft: URL des Linkziels; spiegelt das Attribut href des MathML-<a>-Elements. |
| $target | string | "" | Eigenschaft: Name des Browsing-Kontexts, in dem der Link geöffnet wird, z. B. "_blank"; spiegelt das Attribut target. |
Rückgabewert
document.createElementNS("http://www.w3.org/1998/Math/MathML", "a").Beispiele
MathML-Link dynamisch erzeugen
const MATHML_NS = "http://www.w3.org/1998/Math/MathML";
// <math><a href="..."><mi>π</mi></a></math>
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", "https://de.wikipedia.org/wiki/Kreiszahl");
link.appendChild(mi);
math.appendChild(link);
document.body.appendChild(math);
console.log(link.namespaceURI);
console.log(typeof MathMLAnchorElement !== "undefined" && link instanceof MathMLAnchorElement);
Alle Formel-Links in neuem Tab öffnen (mit Feature-Erkennung)
const MATHML_NS = "http://www.w3.org/1998/Math/MathML";
const links = document.getElementsByTagNameNS(MATHML_NS, "a");
for (const link of links) {
if (typeof MathMLAnchorElement !== "undefined" && link instanceof MathMLAnchorElement) {
// Reflektierte Eigenschaft nutzen
link.target = "_blank";
} else {
// Rückfall: Attribut direkt setzen
link.setAttribute("target", "_blank");
}
}
console.log(`${links.length} MathML-Links angepasst`);
Linkziele relativ zu einem Glossar umschreiben
const MATHML_NS = "http://www.w3.org/1998/Math/MathML";
document.querySelectorAll("math a[href^='#']").forEach((link) => {
const anker = link.getAttribute("href");
link.setAttribute("href", `/glossar${anker}`);
console.log(link.namespaceURI === MATHML_NS, link.getAttribute("href"));
});
// Wichtig · Fallstricke
- Browser-Unterstützung:
MathMLAnchorElementist experimentell und noch nicht in allen Browsern verfügbar. Prüfe vorab mittypeof MathMLAnchorElement !== "undefined"und greife ansonsten aufsetAttribute()/getAttribute()zurück. Auch ob ein MathML-<a>tatsächlich als klickbarer Link gerendert wird, hängt vom Browser ab. - Namensraum:
document.createElement("a")liefert immer einHTMLAnchorElement. Für MathML istcreateElementNS()mithttp://www.w3.org/1998/Math/MathMLPflicht. Im HTML-Parser werden<a>-Tags innerhalb von<math>korrekt dem MathML-Namensraum zugeordnet. - Kein HTMLAnchorElement: Eigenschaften wie
download,rel,hostnameoderpathnamevonHTMLAnchorElementsind nicht zwingend vorhanden – nicht blind darauf verlassen. - Sicherheit: Wie bei HTML-Links gilt: Nutzereingaben nie ungeprüft in
hrefschreiben (Gefahr durchjavascript:-URLs). Beitarget="_blank"auf fremde Seiten sollte, falls unterstützt,rel="noopener"gesetzt werden. - Barrierefreiheit: Verlinkte Formelteile sollten für Screenreader verständlich sein, etwa durch aussagekräftigen Kontext oder
aria-label.