我从来没有实现过这个,但我研究过类似的问题,这就是我会尝试的。
引用 jQuery 实现时,您必须:
- 侦听 Tab 和 Shift+Tab
- 了解哪些元素是可制表符的
- 了解 Tab 键顺序的工作原理
1.侦听选项卡和Shift + Tab
监听Tab和Shift+ Tab可能在网络上的其他地方得到了很好的覆盖,所以我将跳过这一部分。
2. 了解哪些元素是可制表符的
知道哪些元素是可制表符的,这比较棘手。基本上,如果元素是可聚焦的并且没有设置属性,则该元素是可制表符的。因此,我们必须问哪些元素是可聚焦的。以下元素是可聚焦的:tabindex="-1"
-
input
、、、和未禁用的元素。select
textarea
button
object
-
a
和具有 set 的数值或具有数值的元素。area
href
tabindex
- 具有 set 的数值的任何元素。
tabindex
此外,仅当以下情况时,元素才可聚焦:
- 它的祖先都不是。
display: none
- 的计算值为 。这意味着要设置的最近祖先必须具有 值 。如果未设置上级,则计算值为 。
visibility
visible
visibility
visible
visibility
visible
更多详细信息在另一个堆栈溢出答案中。
3. 了解 Tab 键顺序的工作原理
文档中元素的 Tab 键顺序由属性控制。如果未设置任何值,则为 有效 。tabindex
tabindex
0
文档的顺序为:1、2、3、...、0。tabindex
最初,当元素(或没有元素)具有焦点时,Tab 键顺序中的第一个元素是最低的非零。如果多个元素具有相同的元素,则按文档顺序进行,直到到达具有 该 元素的最后一个元素。然后,您将移动到下一个最低点,该过程将继续。最后,以零(或空)结束这些元素。body
tabindex
tabindex
tabindex
tabindex
tabindex