tabIndex 属性控制 DOM 元素的键盘聚焦行为:-1 表示不可 Tab 但可 JS 聚焦;0 表示按 DOM 顺序参与 Tab 流;>0 表示强制插入 Tab 顺序,数值越小越靠前。

在 JavaScript 中,可以通过设置 tabIndex 属性来控制 DOM 元素是否可被键盘 Tab 键聚焦,以及它在 Tab 顺序中的位置。
tabIndex 的三种取值及含义
tabIndex = -1:元素不可通过 Tab 键进入,但可通过 JavaScript 主动调用 .focus() 聚焦(常用于模态框、下拉菜单等需程序控制焦点的场景)
tabIndex = 0:元素按其在 DOM 中的自然顺序参与 Tab 流程(默认不支持 Tab 的元素如 div、span 设为 0 后即可被 Tab 切换到)
tabIndex > 0:元素被强制插入 Tab 顺序,数值越小越靠前;多个正数时,按数值升序排列,相同时按 DOM 出现顺序
用 JavaScript 动态设置 tabIndex 改变聚焦顺序
直接操作元素的 tabIndex 属性即可生效,无需重新渲染或刷新页面:
- 设置
element.tabIndex = 0让一个div可被 Tab 进入 - 设置
element.tabIndex = 3将其排在所有tabIndex=1和tabIndex=2元素之后 - 设置
element.tabIndex = -1移除其在 Tab 流中的位置(但仍能用 JS 聚焦) - 移除属性可用
element.removeAttribute('tabindex'),此时行为退回到浏览器默认(如button仍可 Tab,div不可)
实际应用中的注意事项
Tab 顺序应与视觉流一致,避免打乱用户预期;使用正数 tabIndex 容易导致可访问性问题,建议优先用 tabIndex=0 或保持原生语义化标签(如 button、a)
若需跳过某元素,设为 -1 比设为 0 再禁用更清晰
动态修改后,当前焦点不会自动跳转,如需立即聚焦,需手动调用 element.focus()
简单示例:切换按钮的 Tab 可访问性
假设有一个自定义按钮 <div class="btn">点击</div>:
- 默认不可 Tab —— 添加
tabIndex="0"即可支持键盘导航 - 想临时禁用:JS 中执行
btnEl.tabIndex = -1 - 想置顶 Tab 顺序:设为
tabIndex="1"(前提是其他元素没用更小的正数)


















