Specifying/overriding DIV 标签内所有可制表项的 tabindex 一次
Specifying/overriding tabindex of all tab-able items within a DIV tag at once
假设我有这个
<div id="div1">
<span tabindex="0">Span0</span>
<span tabindex="0">Span1</span>
<span tabindex="0">Span2</span>
</div>
<div id="div2">
<span tabindex="0">Span20</span>
<span tabindex="0">Span21</span>
<span tabindex="0">Span22</span>
</div>
有没有办法让 div2 中的所有跨度在 Tab 顺序方面优先于 dev1 中的跨度,尽管它们的 tabindex 值都设置为 0? IE。如果我在打开屏幕阅读器的情况下进入页面,它应该在循环进入 div1
之前按 Tab 键时首先遍历 div2 中的跨度
注意:我的实际用例比这复杂得多....这只是为了说明目的
注意:我知道我可以将 tabindex 值修改为非零值,但这不是我想要的。我正在寻找一次性设置 div 中所有项目优先级的功能,尽管这些项目被设置为 tabindex=0...
注意:这也应该适用于一般所有可制表符的项目,即。不仅仅是标记为 tabindex="0"
的那些
有没有不用 javascript 的方法? IE。使用 html、css 或 ARIA 标签:https://msdn.microsoft.com/en-us/library/ie/gg701982%28v=vs.85%29.aspx? Is it possible to do it with the landmark roles: http://www.w3.org/WAI/PF/aria-practices/#focus_tabindex <--搜索 "Assign landmark roles to each region"?
如果可以,我该怎么做
不,不修改 tabindex 值是不行的。
使用Javascript/jQuery,您可以使用
$("#div1 span").attr("tabindex", "1");
此外,您必须仔细阅读WCAG页面中关于焦点顺序的内容:
http://www.w3.org/TR/UNDERSTANDING-WCAG20/navigation-mechanisms-focus-order.html
使用不同于“-1”和“0”的 tabindex 值是很少见的。
您可以使用 aria-flowto
属性:
此技术的 objective 是通过使用 aria-flowto 属性 指定内容的替代阅读顺序。当元素的 aria-flowto 属性 具有单个值时,辅助技术可能会放弃正常的文档阅读顺序并转到 id 等于该值的元素。当 aria-flowto 属性 有多个 id 时,辅助技术可能会将目标元素作为替代项呈现给用户,由目标元素的名称标识,用于阅读顺序中的下一个内容。
此技术的问题在于它目前并未得到屏幕阅读器的广泛支持,因此您必须测试目标阅读器的兼容性。
这就是标记的样子
<h2 aria-flowto="div2">Header before messy content</h2>
<div id="div1" aria-flowto="after">
<span tabindex="0">Span0</span>
<span tabindex="0">Span1</span>
<span tabindex="0">Span2</span>
</div>
<div id="div2" aria-flowto="div1">
<span tabindex="0">Span20</span>
<span tabindex="0">Span21</span>
<span tabindex="0">Span22</span>
</div>
<h2 id="after">Header after messy content</h2>
假设我有这个
<div id="div1">
<span tabindex="0">Span0</span>
<span tabindex="0">Span1</span>
<span tabindex="0">Span2</span>
</div>
<div id="div2">
<span tabindex="0">Span20</span>
<span tabindex="0">Span21</span>
<span tabindex="0">Span22</span>
</div>
有没有办法让 div2 中的所有跨度在 Tab 顺序方面优先于 dev1 中的跨度,尽管它们的 tabindex 值都设置为 0? IE。如果我在打开屏幕阅读器的情况下进入页面,它应该在循环进入 div1
之前按 Tab 键时首先遍历 div2 中的跨度注意:我的实际用例比这复杂得多....这只是为了说明目的
注意:我知道我可以将 tabindex 值修改为非零值,但这不是我想要的。我正在寻找一次性设置 div 中所有项目优先级的功能,尽管这些项目被设置为 tabindex=0...
注意:这也应该适用于一般所有可制表符的项目,即。不仅仅是标记为 tabindex="0"
的那些有没有不用 javascript 的方法? IE。使用 html、css 或 ARIA 标签:https://msdn.microsoft.com/en-us/library/ie/gg701982%28v=vs.85%29.aspx? Is it possible to do it with the landmark roles: http://www.w3.org/WAI/PF/aria-practices/#focus_tabindex <--搜索 "Assign landmark roles to each region"?
如果可以,我该怎么做
不,不修改 tabindex 值是不行的。
使用Javascript/jQuery,您可以使用
$("#div1 span").attr("tabindex", "1");
此外,您必须仔细阅读WCAG页面中关于焦点顺序的内容: http://www.w3.org/TR/UNDERSTANDING-WCAG20/navigation-mechanisms-focus-order.html
使用不同于“-1”和“0”的 tabindex 值是很少见的。
您可以使用 aria-flowto
属性:
此技术的 objective 是通过使用 aria-flowto 属性 指定内容的替代阅读顺序。当元素的 aria-flowto 属性 具有单个值时,辅助技术可能会放弃正常的文档阅读顺序并转到 id 等于该值的元素。当 aria-flowto 属性 有多个 id 时,辅助技术可能会将目标元素作为替代项呈现给用户,由目标元素的名称标识,用于阅读顺序中的下一个内容。
此技术的问题在于它目前并未得到屏幕阅读器的广泛支持,因此您必须测试目标阅读器的兼容性。
这就是标记的样子
<h2 aria-flowto="div2">Header before messy content</h2>
<div id="div1" aria-flowto="after">
<span tabindex="0">Span0</span>
<span tabindex="0">Span1</span>
<span tabindex="0">Span2</span>
</div>
<div id="div2" aria-flowto="div1">
<span tabindex="0">Span20</span>
<span tabindex="0">Span21</span>
<span tabindex="0">Span22</span>
</div>
<h2 id="after">Header after messy content</h2>