Signatur
Beschreibung
Die Eigenschaft host der Schnittstelle MathMLAnchorElement ist ein String mit dem Host-Teil der Link-URL. Er besteht aus dem hostname und, wenn die URL einen Port hat, einem Doppelpunkt gefolgt vom port, also zum Beispiel "example.com:8080". Hat die URL keinen Host (etwa bei mailto:- oder data:-URLs), ist der Wert ein leerer String.
MathMLAnchorElement steht für das Element <a> im MathML-Namensraum. Damit lassen sich Formelteile direkt verlinken. Die Eigenschaft verhält sich genauso wie HTMLAnchorElement.host und URL.host: Sie wertet das Attribut href aus, und zwar aufgelöst gegen die Basis-URL des Dokuments.
Die Eigenschaft ist les- und schreibbar. Wenn du einen neuen Wert zuweist, wird der Host in der URL ersetzt und das Attribut href sofort aktualisiert. Pfad, Suchparameter und Fragment bleiben dabei erhalten. Nützlich ist das zum Beispiel, wenn Links in mathematischen Inhalten auf eine andere Umgebung (Staging oder Produktion) umgestellt oder externe Links erkannt werden sollen.
Ist der Port der Standard-Port des Schemas (80 bei http, 443 bei https), wird er nicht in host aufgenommen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $value | string | Nur beim Setzen: neuer Host, optional mit Port, z. B. "cdn.example.org:8443". Ungültige Werte werden stillschweigend ignoriert. |
Rückgabewert
href-URL (hostname bzw. hostname:port). Ein leerer String, wenn die URL keinen Host hat oder kein gültiges href gesetzt ist.Beispiele
Host eines MathML-Links auslesen (mit Fallback)
const MATHML_NS = "http://www.w3.org/1998/Math/MathML";
const link = document.createElementNS(MATHML_NS, "a");
link.setAttribute("href", "https://example.com:8080/formeln/euler?x=1#def");
// Unterstützung prüfen, sonst mit URL auswerten
const host = "host" in link
? link.host
: new URL(link.getAttribute("href"), document.baseURI).host;
console.log(host);
Standard-Port wird weggelassen
const link = document.createElementNS("http://www.w3.org/1998/Math/MathML", "a");
link.setAttribute("href", "https://example.com:443/pfad");
const host = link.host ?? new URL(link.getAttribute("href")).host;
console.log(host);
Externe Links in Formeln markieren
const MATHML_NS = "http://www.w3.org/1998/Math/MathML";
const getHost = (a) =>
typeof a.host === "string"
? a.host
: new URL(a.getAttribute("href") ?? "", document.baseURI).host;
for (const a of document.getElementsByTagNameNS(MATHML_NS, "a")) {
if (a.hasAttribute("href") && getHost(a) !== location.host) {
a.setAttribute("data-extern", "true");
}
}
Host umschreiben (Staging → Produktion)
const link = document.createElementNS("http://www.w3.org/1998/Math/MathML", "a");
link.setAttribute("href", "https://staging.example.com:8443/doku/integral#satz");
if ("host" in link) {
link.host = "www.example.com";
} else {
const url = new URL(link.getAttribute("href"));
url.host = "www.example.com";
link.setAttribute("href", url.href);
}
console.log(link.getAttribute("href"));
// Wichtig · Fallstricke
- Kompatibilität:
MathMLAnchorElementist neu bzw. experimentell und wird von den meisten Browsern noch nicht unterstützt. Dort ist ein MathML-<a>nur ein allgemeinesMathMLElementohnehost. Prüfe deshalb vorher mit"host" in elementund nutze als Ausweichlösungnew URL(element.getAttribute("href"), document.baseURI).host. - Port beim Setzen: Enthält der neue Wert keinen Port, bleibt ein vorhandener Port in der URL erhalten, siehe letztes Beispiel. Soll der Port entfernt werden, setze zusätzlich
port = "". hostenthält den Port,hostnamedagegen nie. Für Vergleiche mitlocation.hostsollte man immer dieselbe Variante nutzen.- Internationalisierte Domainnamen werden in Punycode zurückgegeben (z. B.
xn--mnchen-3ya.de). - Relative
href-Werte werden gegen die Basis-URL des Dokuments aufgelöst.hostliefert dann den Host des Dokuments und keinen leeren String.