aria-rowindextext是ARIA 1.2引入的实验性只读API输出属性,仅由辅助技术内部使用,不可手动设置;开发者应改用aria-rowindex+aria-setsize或aria-label/live region实现行号提示。

aria-rowindextext 是什么,它不适用于普通 HTML 表格
aria-rowindextext 是 ARIA 1.2 引入的实验性属性,**仅在特定可访问性 API 场景下由辅助技术(如屏幕阅读器)内部使用**,不是给开发者直接设置的。你无法、也不应该在 HTML 中手动写 aria-rowindextext="第3行" 这类代码——浏览器会忽略它,AT 也不会读取。
它的设计意图是让自定义表格组件(比如用 div + role="table" 实现的虚拟滚动表格)在动态更新行索引时,向 AT 提供更自然的朗读文本(例如“第5行,共200行”),而非默认的“第5行”。但该属性必须由 JavaScript 动态注入,并配合 aria-rowindex 使用,且目前仅 Chromium 内核(Chrome/Edge)的 NVDA 部分支持,JAWS 和 VoiceOver 均未实现。
替代方案:用 aria-rowindex + aria-setsize 控制行号朗读
对真实 <table>,你根本不需要干预——浏览器自动计算 <tr> 顺序并朗读“第X行”。只有在自定义表格(role="rowgroup" + role="row")中才需显式管理行号:
-
aria-rowindex必须为正整数,表示当前行在逻辑表格中的绝对位置(从1开始) -
aria-setsize和aria-posinset更通用,但对行号朗读效果不稳定;aria-rowindex是明确指定行号的唯一可靠方式 - 不要同时设
aria-rowindex和aria-posinset,可能引发冲突
示例(合法用法):
立即学习“前端免费学习笔记(深入)”;
使用 Puppeteer + Chrome 将 HTML 渲染为中文 PDF,自动处理图表等待、Tab 展开、动画、测高、白边消除、防分页,适用于看板、报表、网页和交互图表转 PDF。
<div role="table" aria-label="用户列表">
<div role="rowgroup">
<div role="row" aria-rowindex="1">
<div role="gridcell">张三</div>
<div role="gridcell">28</div>
</div>
<div role="row" aria-rowindex="2">
<div role="gridcell">李四</div>
<div role="gridcell">32</div>
</div>
</div>
</div>
为什么不能手写 aria-rowindextext?常见错误现象
如果你在 HTML 源码里写了 aria-rowindextext,会发生以下情况:
- 浏览器 DevTools 中能看到该属性,但
getComputedAccessibleName()返回null - NVDA/Chrome 组合下朗读仍为“第2行”,不会变成你写的“第二行”
- WAVE 或 axe 工具会报
ARIA attribute is not supported警告 - React/Vue 等框架可能因属性名不被识别而过滤掉该属性(尤其在 SSR 渲染时)
根本原因:该属性属于 可访问性 API 输出属性(类似 aria-busy 的只读状态),不是输入属性。它只能由平台在内部生成,不能由网页脚本赋值。
真需要自定义行提示?用 aria-label 或 live region 替代
如果业务场景确实要求朗读“已选中:第7行(共150行)”,正确做法是绕过 aria-rowindextext,改用:
- 给当前高亮行加
aria-label="已选中:第7行,共150行"(注意:会完全覆盖单元格内容朗读,慎用) - 用
<div aria-live="polite" aria-atomic="true">单独输出提示,例如:<div aria-live="polite">已定位到第7行</div> - 结合
aria-activedescendant在表格容器上管理焦点,并在 JS 中同步更新提示区域文本
这种模式可控、兼容性好,且所有主流 AT 都能稳定捕获。
复杂点在于:自定义表格的可访问性不是加几个 ARIA 属性就能解决的,焦点管理、键盘导航(↑↓→←)、排序重排后的索引同步,都得一并处理。很多人卡在 aria-rowindex 动态更新没跟上数据变化,导致朗读错乱——这才是实际中最容易被忽略的地方。

















