Il n'y a pas de liste définitive, c'est au navigateur. La seule norme que nous avons est le DOM niveau 2 HTML , selon lequel les seuls éléments qui ont une focus()
méthode sont HTMLInputElement, HTMLSelectElement, HTMLTextAreaElement et HTMLAnchorElement. Cela omet notamment HTMLButtonElement et HTMLAreaElement.
Les navigateurs d'aujourd'hui se définissent focus()
sur HTMLElement, mais un élément ne prendra réellement le focus que s'il s'agit de:
- HTMLAnchorElement / HTMLAreaElement avec un href
- HTMLInputElement / HTMLSelectElement / HTMLTextAreaElement / HTMLButtonElement mais pas avec
disabled
(IE vous donne en fait une erreur si vous essayez), et les téléchargements de fichiers ont un comportement inhabituel pour des raisons de sécurité
- HTMLIFrameElement (bien que le concentrer ne fasse rien d'utile). D'autres éléments d'intégration également, peut-être, je ne les ai pas tous testés.
- Tout élément avec un
tabindex
Il existe probablement d'autres exceptions et ajouts subtils à ce comportement en fonction du navigateur.
element.isContentEditable === true
sont également focalisables. Notez que IE -10 (11+?) Peut focaliser n'importe quel élément avec un bloc d'affichage ou une table (div, span, etc.).Ici, j'ai un sélecteur CSS basé sur la réponse de Bobince pour sélectionner n'importe quel élément HTML focalisable:
ou un peu plus beau dans SASS:
Je l'ai ajouté comme réponse, car c'était ce que je cherchais, lorsque Google m'a redirigé vers cette question Stackoverflow.
EDIT: Il y a un autre sélecteur, qui est focalisable:
Cependant, cela est utilisé très rarement.
la source
<a href="foo.html">Bar</a>
est certainement focalisable car c'est una
élément qui a unhref
attribut. Mais votre sélecteur ne l'inclut pas.tabindex="-1"
ne rend pas un élément flou, il ne peut tout simplement pas être focalisé par tabulation. Il peut toujours recevoir le focus en cliquant dessus ou par programme avecHTMLElement.focus()
; idem pour tout autre nombre négatif. Voir: developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/…Je crée une liste SCSS de tous les éléments focalisables et j'ai pensé que cela pourrait aider quelqu'un en raison du classement Google de cette question.
Quelques points à noter:
:not([tabindex="-1"])
pour:not([tabindex^="-"])
car il est parfaitement plausible de générer en-2
quelque sorte. Mieux vaut prévenir que guérir, non?:not([tabindex^="-"])
à tous les autres sélecteurs focalisables est complètement inutile. Lorsque vous l'utilisez,[tabindex]:not([tabindex^="-"])
il inclut déjà tous les éléments avec lesquels vous seriez en train de nier:not
!:not([disabled])
parce que les éléments désactivés ne peuvent jamais être focalisés. Encore une fois, il est inutile de l'ajouter à chaque élément.la source
La bibliothèque d'accessibilité ally.js fournit ici une liste non officielle basée sur des tests:
https://allyjs.io/data-tables/focusable.html
(NB: Leur page ne dit pas à quelle fréquence les tests ont été effectués.)
la source
Peut-être que celui-ci peut aider:
valeur de retour: vrai = succès, faux = échoué
Reff: https://developer.mozilla.org/en-US/docs/Web/API/DocumentOrShadowRoot/activeElement https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/focus
la source
http://www.w3schools.com/cssref/sel_focus.asp
la source