Start · Sprachen · JavaScript · Referenz · MathMLAnchorElement.search

MathMLAnchorElement.search

Eigenschaft

Liest oder setzt den Abfrageteil (<code>?…</code>) der URL im <code>href</code>-Attribut eines MathML-<code>&lt;a&gt;</code>-Elements.

seit JavaScript Experimentell: bisher kaum von Browsern unterstütz Kategorie: webapi

Signatur

MathMLAnchorElement.search

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

Typ
string
Beschreibung
Der Abfrageteil der URL einschließlich führendem ?, 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);
}
?begriff=integral&lang=de

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"));
integral true

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"));
}
https://example.com/glossar?begriff=integral&lang=de#def

// Wichtig · Fallstricke

  • Browser-Unterstützung: MathMLAnchorElement ist neu und experimentell. Die meisten Browser stellen MathML-<a>-Elemente bisher als MathMLElement ohne URL-Eigenschaften bereit, dort ist link.search dann undefined. Prüfe deshalb immer mit \"search\" in element und greife sonst auf new URL(...) zurück.
  • Du musst das Element im MathML-Namensraum erzeugen (document.createElementNS(\"http://www.w3.org/1998/Math/MathML\", \"a\")). Mit document.createElement(\"a\") entsteht ein HTMLAnchorElement.
  • Ein href mit nur ? liefert \"\", genau wie eine URL ganz ohne Abfrage. Beide Fälle lassen sich über search nicht unterscheiden.
  • Der Wert ist prozentkodiert (z. B. %C3%A4 für „ä“). Zum Lesen der Werte nimm URLSearchParams, nicht decodeURIComponent auf dem ganzen String.
  • Kann das href nicht 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. keine javascript:-URLs übernehmen.