ARIA 角色:'owned element' 可以任意嵌套在 DOM 中吗?

ARIA Roles: Can an 'owned element' be nested arbitrarily deep in the DOM?

W3C 的 Accessible Rich Internet Applications (WAI-ARIA) 1.1 定义一个拥有的元素如下(来自第 4 部分):

Owned Element: An 'owned element' is any DOM descendant of the element, any element specified as a child via aria-owns, or any DOM descendant of the owned child.

(让我们忽略 aria-owns,一个 属性 允许您指定 DOM 中任何元素之间的 parent/child 关系 [在可访问性树中] 通过元素ID。)

了解什么算作拥有元素很重要,因为许多角色都有 required owned elements(反之:必需的上下文角色)。

该定义表示任何 DOM 后代都算在内。然而,尤其是在网格和树等复杂结构的情况下,可访问性树似乎无法识别几个层次深的自有元素——尽管很难说清楚,因为所有屏幕阅读器和浏览器都不同。此外,有许多角色似乎没有添加任何无法从 DOM 树中推断出的值(例如,大多数 group 子类,尽管与原生 [=54] 并行=] 表被提及为 rowgroup) 的目的,并且可能仅作为中介存在。此外,在示例代码中,我不记得曾见过复杂的结构,其中所需的元素相隔不止一层;在我遇到的少数情况下,中间元素通常具有 presentation 角色。

请根据您的喜好随意回答一般或特定级别的问题,但我个人更关心 DOM 主要由 <div> 和 [=18] 组成的层次结构=]s 而不是原生的 HTML 语义。 This page on ARIA practices 谈论表格小部件并提到:

If you decide to not use the native HTML <table> elements and choose more flexible elements, such as <div> and <span>s, with applied WAI-ARIA roles in this section, you should structurally lay out your elements in line with what you would expect from HTML. All of your rowheaders should be in a row and your gridcells should be children of each subsequent row in the same format as HTML for <td>s and <th>s within <tr>s.

...但我不确定这是必要的还是只是建议;通常,文档使用 "must" 来描述严格的规范。

除非在临时结构上使用角色="presentation",否则所有子关系都必须是直接关系。不这样做 can/will 会导致计数和值混乱。

一般来说,当有临时结构时,它们是样式或脚本的挂钩,您可以重组代码以摆脱它们(这肯定会更干净 HTML)。

你提到的关于表格的例子使用了"should"这个词,但并不规范。它真的应该说 "must"。您不能错过网格中的任何结构,并且仍然期望公告和导航能够正常工作。这意味着您最好拥有规范文档规范部分所需的父子角色中规定的所有结构。