属性 控件状态
aria-setsize
当 DOM 中未包含集合的全部项目时,用于声明集合的总项目数。与 aria-posinset 配合使用,使屏幕阅读器能够播报“第 14 项,共 5,000 项”,即使当前仅渲染了其中五项。若总数未知,使用 -1。
使用时机
凡使用 aria-posinset 的场景,均应同时使用本属性。两者成对出现:没有总数,位置信息便失去意义。常见场景包括虚拟化列表、分页网格、可筛选的组合框以及无限滚动的信息流——任何 DOM 中仅呈现较大集合一部分的场景均适用。
本属性适用于具有集合语义的容器内的项目:option、menuitem、treeitem、tab、row,以及 feed 内的 article。该属性设置在项目上,而非容器上。
行为说明
属性值为整数。已知总数时填写真实值;当总数确实无界或未知时(例如持续加载更多结果的实时搜索流),填写 -1。部分屏幕阅读器会将 -1 播报为”很多”或直接省略数量;其他屏幕阅读器则静默回退为同级元素计数。
当底层集合发生变化时——例如新筛选条件、排序或删除行——需及时更新 aria-setsize。可见窗口中的每一个项目必须携带相同的 aria-setsize 值;同级元素之间的值不一致会导致令人困惑的播报,如”第 1 项,共 10 项”紧随”第 2 项,共 9 项”。
常见错误
- 将
aria-setsize设置在容器上而非各项目上。该属性应逐项设置。 - 筛选或排序后忘记更新该值,导致用户听到的仍是未筛选前的总数,而许多结果实际上已不可达。
- 同级项目间
aria-setsize不一致——一个项目显示100,下一个显示99。 - 在容器已通过 DOM 顺序包含全部项目的情况下仍使用
aria-setsize。辅助技术原本计数正确,添加该属性反而引入偏差。 - 使用零或
-1以外的负值。只有正整数和-1是有效值。 - 忘记设置
aria-posinset。aria-setsize单独使用时只告诉用户共有多少项目,却无法说明当前项目的位置。
示例
<!-- 树形结构,子节点在用户展开分支时懒加载 -->
<ul role="tree" aria-label="Files">
<li
role="treeitem"
aria-level="2"
aria-posinset="1"
aria-setsize="248"
>
invoice-001.pdf
</li>
<li
role="treeitem"
aria-level="2"
aria-posinset="2"
aria-setsize="248"
>
invoice-002.pdf
</li>
<!-- 另有 246 项,用户滚动时懒加载 -->
</ul>