标准 · ARIA

属性 控件状态

aria-setsize

当 DOM 中未包含集合的全部项目时,用于声明集合的总项目数。与 aria-posinset 配合使用,使屏幕阅读器能够播报“第 14 项,共 5,000 项”,即使当前仅渲染了其中五项。若总数未知,使用 -1。

使用时机

凡使用 aria-posinset 的场景,均应同时使用本属性。两者成对出现:没有总数,位置信息便失去意义。常见场景包括虚拟化列表、分页网格、可筛选的组合框以及无限滚动的信息流——任何 DOM 中仅呈现较大集合一部分的场景均适用。

本属性适用于具有集合语义的容器内的项目:optionmenuitemtreeitemtabrow,以及 feed 内的 article。该属性设置在项目上,而非容器上。

行为说明

属性值为整数。已知总数时填写真实值;当总数确实无界或未知时(例如持续加载更多结果的实时搜索流),填写 -1。部分屏幕阅读器会将 -1 播报为”很多”或直接省略数量;其他屏幕阅读器则静默回退为同级元素计数。

当底层集合发生变化时——例如新筛选条件、排序或删除行——需及时更新 aria-setsize。可见窗口中的每一个项目必须携带相同的 aria-setsize 值;同级元素之间的值不一致会导致令人困惑的播报,如”第 1 项,共 10 项”紧随”第 2 项,共 9 项”。

常见错误

  • aria-setsize 设置在容器上而非各项目上。该属性应逐项设置。
  • 筛选或排序后忘记更新该值,导致用户听到的仍是未筛选前的总数,而许多结果实际上已不可达。
  • 同级项目间 aria-setsize 不一致——一个项目显示 100,下一个显示 99
  • 在容器已通过 DOM 顺序包含全部项目的情况下仍使用 aria-setsize。辅助技术原本计数正确,添加该属性反而引入偏差。
  • 使用零或 -1 以外的负值。只有正整数和 -1 是有效值。
  • 忘记设置 aria-posinsetaria-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>