Es gibt keine definitive Liste, es liegt am Browser. Der einzige Standard, den wir haben, ist DOM Level 2 HTML , wonach die einzigen Elemente, die eine focus()
Methode haben, HTMLInputElement, HTMLSelectElement, HTMLTextAreaElement und HTMLAnchorElement sind. Dadurch werden insbesondere HTMLButtonElement und HTMLAreaElement weggelassen.
Heutige Browser definieren focus()
HTMLElement, aber ein Element wird erst dann richtig fokussiert, wenn es eines der folgenden Elemente ist:
- HTMLAnchorElement / HTMLAreaElement mit einem href
- HTMLInputElement / HTMLSelectElement / HTMLTextAreaElement / HTMLButtonElement, jedoch nicht mit
disabled
(IE gibt tatsächlich einen Fehler aus, wenn Sie es versuchen), und Datei-Uploads weisen aus Sicherheitsgründen ein ungewöhnliches Verhalten auf
- HTMLIFrameElement (obwohl das Fokussieren nichts Nützliches bringt). Andere Einbettungselemente habe ich vielleicht auch nicht alle getestet.
- Jedes Element mit a
tabindex
Abhängig vom Browser gibt es wahrscheinlich andere subtile Ausnahmen und Ergänzungen zu diesem Verhalten.
element.isContentEditable === true
sind auch fokussierbar. Beachten Sie, dass IE -10 (11+?) Jedes Element mit Anzeigeblock oder Tabelle (div, span usw.) fokussieren kann.Hier habe ich einen CSS-Selektor basierend auf bobince ‚s Antwort jedes fokussierbarem HTML - Element zu wählen:
oder etwas schöner in SASS:
Ich habe es als Antwort hinzugefügt, da ich genau danach gesucht habe, als Google mich zu dieser Stackoverflow-Frage weitergeleitet hat.
EDIT: Es gibt noch einen Selektor, der fokussierbar ist:
Dies wird jedoch sehr selten verwendet.
quelle
<a href="foo.html">Bar</a>
ist es sicherlich fokussierbar, weil es eina
Element ist, das einhref
Attribut hat. Ihr Selektor enthält es jedoch nicht.tabindex="-1"
ist nicht ein Element unfocusable machen, es kann einfach nicht von der Tabulatortaste fokussiert werden. Es kann weiterhin Fokus erhalten, indem Sie darauf klicken oder programmgesteuert mitHTMLElement.focus()
; Gleiches gilt für jede andere negative Zahl. Siehe: developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/…Ich erstelle eine SCSS-Liste aller fokussierbaren Elemente und dachte, dies könnte aufgrund des Google-Ranges dieser Frage jemandem helfen.
Ein paar Dinge zu beachten:
:not([tabindex="-1"])
,:not([tabindex^="-"])
weil es durchaus plausibel ist,-2
irgendwie zu generieren . Besser sicher als leid, oder?:not([tabindex^="-"])
zu allen anderen fokussierbaren Selektoren ist völlig sinnlos. Wenn Sie[tabindex]:not([tabindex^="-"])
es verwenden, enthält es bereits alle Elemente, mit denen Sie negieren würden:not
!:not([disabled])
weil deaktivierte Elemente niemals fokussierbar sein können. Es ist also wieder sinnlos, es jedem einzelnen Element hinzuzufügen.quelle
Die Eingabehilfenbibliothek von ally.js bietet hier eine inoffizielle, testbasierte Liste:
https://allyjs.io/data-tables/focusable.html
(NB: Auf ihrer Seite steht nicht, wie oft Tests durchgeführt wurden.)
quelle
Vielleicht kann dieser helfen:
Rückgabewert: true = Erfolg, false = fehlgeschlagen
Reff: https://developer.mozilla.org/en-US/docs/Web/API/DocumentOrShadowRoot/activeElement https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/focus
quelle
http://www.w3schools.com/cssref/sel_focus.asp
quelle