Нет определенного списка, это зависит от браузера. Единственный стандарт, который у нас есть, это HTML DOM уровня 2 , согласно которому единственными элементами, имеющими focus()
метод, являются HTMLInputElement, HTMLSelectElement, HTMLTextAreaElement и HTMLAnchorElement. Это особенно пропускает HTMLButtonElement и HTMLAreaElement.
Современные браузеры определяют focus()
HTMLElement, но на самом деле элемент не будет фокусироваться, если он не один из:
- HTMLAnchorElement / HTMLAreaElement с ссылкой
- HTMLInputElement / HTMLSelectElement / HTMLTextAreaElement / HTMLButtonElement, но не с
disabled
(IE на самом деле выдает ошибку, если вы пытаетесь), и загрузка файлов имеет необычное поведение по соображениям безопасности
- HTMLIFrameElement (хотя фокусировка не делает ничего полезного). Другие встраиваемые элементы также, может быть, я не проверял их все.
- Любой элемент с
tabindex
В зависимости от браузера могут быть и другие тонкие исключения и дополнения к этому поведению.
element.isContentEditable === true
тоже можно фокусировать. Обратите внимание, что IE-10 (11+?) Может фокусировать любой элемент с блоком отображения или таблицей (div, span и т. Д.).Здесь у меня есть CSS-селектор , основанный на bobince «ы ответ , чтобы выбрать любой фокусируемых HTML элемент:
или чуть красивее в SASS:
Я добавил это как ответ, потому что это было то, что я искал, когда Google перенаправил меня на этот вопрос Stackoverflow.
РЕДАКТИРОВАТЬ: есть еще один селектор, который можно фокусировать:
Однако это используется очень редко.
источник
<a href="foo.html">Bar</a>
, конечно, фокусируемый, потому что этоa
элемент, который имеетhref
атрибут. Но ваш селектор не включает его.tabindex="-1"
это не делает элемент unfocusable, он просто не может быть сфокусирован обходом. Это все еще может получить фокус, нажимая на это или программно сHTMLElement.focus()
; то же самое для любого другого отрицательного числа. См .: developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/…Я создаю список SCSS всех фокусируемых элементов, и я подумал, что это может кому-то помочь из-за рейтинга Google в этом вопросе.
Несколько вещей, на которые стоит обратить внимание:
:not([tabindex="-1"])
на,:not([tabindex^="-"])
потому что это вполне возможно генерировать-2
как-то. Лучше в безопасности, чем потом сожалеть?:not([tabindex^="-"])
все остальные фокусируемые селекторы совершенно бессмысленно. При[tabindex]:not([tabindex^="-"])
его использовании уже включены все элементы, с которыми вы бы отрицали:not
!:not([disabled])
потому что отключенные элементы никогда не могут быть фокусируемыми. Опять же, бесполезно добавлять его к каждому элементу.источник
Ally.js библиотека доступности предоставляет неофициальный, тест на основе списка здесь:
https://allyjs.io/data-tables/focusable.html
(NB. На их странице не указано, как часто выполнялись тесты.)
источник
Может быть, это может помочь:
возвращаемое значение: true = успех, false = сбой
Рефф: https://developer.mozilla.org/en-US/docs/Web/API/DocumentOrShadowRoot/activeElement https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/focus
источник
http://www.w3schools.com/cssref/sel_focus.asp
источник