Signatur
Beschreibung
Die Eigenschaft search der Schnittstelle MathMLAnchorElement steht für die Suchzeichenfolge (auch Abfragezeichenfolge oder Query-String) der Ziel-URL eines MathML-Links. Sie beginnt mit einem ?, auf das die Parameter der URL folgen, z. B. ?lang=de&page=2. Das Fragment (#…) gehört nicht dazu.
Sie funktioniert genauso wie HTMLAnchorElement.search aus der Mixin-Schnittstelle HTMLHyperlinkElementUtils. Beim Lesen bekommst du den aktuellen Abfrageteil des aufgelösten href. Hat die URL keine Abfrage oder nur ein einzelnes ?, ist das Ergebnis ein leerer String. Beim Schreiben wird der Abfrageteil ersetzt und das href-Attribut sofort angepasst. Ein führendes ? ist dabei optional, und Sonderzeichen werden automatisch prozentkodiert.
Das ist praktisch, wenn Links in Formeln (z. B. Verweise auf Definitionen oder Glossareinträge) nachträglich mit Parametern wie Sprache, Tracking oder Ansichtsoptionen versehen werden sollen, ohne die ganze URL von Hand zusammenzusetzen. Für das komfortable Auslesen einzelner Parameter übergibst du den Wert am besten an URLSearchParams.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $value | string | Nur beim Setzen: die neue Abfragezeichenfolge, mit oder ohne führendes ?. Ein leerer String entfernt die Abfrage. |
Rückgabewert
?, oder "", wenn keine Abfrage vorhanden ist bzw. das href keine gültige URL ergibt.Beispiele
Abfragezeichenfolge eines MathML-Links auslesen
const MATHML_NS = "http://www.w3.org/1998/Math/MathML";
const link = document.createElementNS(MATHML_NS, "a");
link.setAttribute("href", "https://example.com/glossar?begriff=integral&lang=de#def");
if ("search" in link) {
console.log(link.search);
} else {
// Fallback, falls MathMLAnchorElement nicht unterstützt wird
console.log(new URL(link.getAttribute("href"), document.baseURI).search);
}
Einzelne Parameter mit URLSearchParams auswerten
const link = document.querySelector("math a[href]");
const query = link.search ?? new URL(link.getAttribute("href"), document.baseURI).search;
const params = new URLSearchParams(query);
console.log(params.get("begriff"));
console.log(params.has("lang"));
Sprachparameter an alle Formel-Links anhängen
const lang = document.documentElement.lang || "de";
for (const link of document.querySelectorAll("math a[href]")) {
const url = new URL(link.getAttribute("href"), document.baseURI);
const params = new URLSearchParams(url.search);
params.set("lang", lang);
if ("search" in link) {
link.search = params.toString(); // führendes "?" wird ergänzt
} else {
url.search = params.toString();
link.setAttribute("href", url.href);
}
console.log(link.getAttribute("href"));
}
// Wichtig · Fallstricke
- Browser-Unterstützung:
MathMLAnchorElementist neu und experimentell. Die meisten Browser stellen MathML-<a>-Elemente bisher alsMathMLElementohne URL-Eigenschaften bereit, dort istlink.searchdannundefined. Prüfe deshalb immer mit\"search\" in elementund greife sonst aufnew URL(...)zurück. - Du musst das Element im MathML-Namensraum erzeugen (
document.createElementNS(\"http://www.w3.org/1998/Math/MathML\", \"a\")). Mitdocument.createElement(\"a\")entsteht einHTMLAnchorElement. - Ein
hrefmit nur?liefert\"\", genau wie eine URL ganz ohne Abfrage. Beide Fälle lassen sich übersearchnicht unterscheiden. - Der Wert ist prozentkodiert (z. B.
%C3%A4für „ä“). Zum Lesen der Werte nimmURLSearchParams, nichtdecodeURIComponentauf dem ganzen String. - Kann das
hrefnicht als URL aufgelöst werden, liefert die Eigenschaft einen leeren String, und Zuweisungen haben keine Wirkung. - Sicherheit: Werte, die du aus Benutzereingaben in die Abfrage schreibst, werden zwar kodiert. Das Linkziel (
href) solltest du aber trotzdem prüfen, z. B. keinejavascript:-URLs übernehmen.