Signatur
Beschreibung
Die Eigenschaft tabIndex der Schnittstelle MathMLElement gibt als Ganzzahl an, ob und in welcher Reihenfolge ein MathML-Element (z. B. <math>, <mrow>, <mi>) per Tabulatortaste fokussiert werden kann. Sie spiegelt das Inhaltsattribut tabindex wider und funktioniert genauso wie HTMLElement.tabIndex. Beides stammt aus dem Mixin HTMLOrSVGElement.
Die Werte bedeuten:
- Negativ (üblicherweise
-1): Das Element kann per Skript mitfocus()fokussiert werden, wird bei der Tab-Navigation aber übersprungen. 0: Das Element kommt in der normalen Dokumentreihenfolge in die Tab-Reihenfolge.- Positiv: Das Element wird vor allen Elementen mit
0fokussiert, aufsteigend nach dem Wert sortiert.
MathML-Elemente sind standardmäßig nicht fokussierbar. Ohne tabindex-Attribut liefert die Eigenschaft deshalb -1. Nützlich ist sie z. B. bei interaktiven Formeln, etwa wenn Nutzer mit der Tastatur durch Teilausdrücke navigieren oder ein <maction>-ähnliches Verhalten per Skript umgesetzt wird. Auch Screenreader-Nutzer profitieren, wenn eine Formel als Ganzes fokussierbar ist.
Rückgabewert
long), die die Tab-Position angibt. Ohne gesetztes Attribut ist der Wert -1. Bei einer Zuweisung wird das Attribut tabindex gesetzt, der Wert wird dabei in eine Ganzzahl umgewandelt.Beispiele
Tab-Index einer Formel auslesen und setzen
// HTML: <math id="formel"><mi>x</mi><mo>=</mo><mn>2</mn></math>
const formel = document.getElementById('formel');
console.log(formel.tabIndex); // ohne Attribut
formel.tabIndex = 0; // in die normale Tab-Reihenfolge aufnehmen
console.log(formel.tabIndex);
console.log(formel.getAttribute('tabindex'));
Alle Formeln per Tastatur erreichbar machen
// Jede <math>-Formel fokussierbar machen und beim Fokus hervorheben
document.querySelectorAll('math').forEach((formel) => {
formel.tabIndex = 0;
formel.addEventListener('focus', () => formel.classList.add('aktiv'));
formel.addEventListener('blur', () => formel.classList.remove('aktiv'));
});
console.log(`${document.querySelectorAll('math[tabindex="0"]').length} Formeln fokussierbar`);
Nur per Skript fokussierbar (tabIndex = -1)
// HTML: <math><mrow id="bruch"><mfrac><mn>1</mn><mn>2</mn></mfrac></mrow></math>
const bruch = document.getElementById('bruch');
// Nicht in der Tab-Reihenfolge, aber programmatisch fokussierbar
bruch.tabIndex = -1;
bruch.focus();
console.log(document.activeElement === bruch);
// Wichtig · Fallstricke
- Positive Werte vermeiden: Werte größer als
0ändern die natürliche Fokusreihenfolge und sind schlecht für die Barrierefreiheit. Verwende besser0oder-1. - Standardwert: Anders als bei Links oder Formularfeldern in HTML sind MathML-Elemente von Haus aus nicht fokussierbar.
tabIndexliefert dort ohne Attribut-1. - Browser-Kompatibilität: Firefox unterstützt
MathMLElementseit Version 71. Chromium kann MathML Core erst ab Version 109. In älteren Chromium-Browsern sind MathML-Elemente nur einfacheElement-Objekte ohnetabIndex. Dort hilft als AusweichlösungsetAttribute('tabindex', '0'). Ob das dann tatsächlich fokussierbar macht, hängt vom Browser ab. - Fokussierbar heißt nicht bedienbar: Ein fokussierbares Element braucht zusätzlich Tastatur-Handler (
keydown) und passende ARIA-Attribute, etwaroleundaria-label, damit es wirklich bedienbar ist.