我有一个动态网页,我需要重新排序内容中某些位置的两个元素的Tab键顺序。我真的不想为每个前面的元素设置tab索引来实现这一点。是否可以相对于元素在DOM中的位置为元素指定制表符索引,从而保留其余元素的自然制表顺序?
提供以下内容:
<a>Link1</a>
<a>Link2</a>
<a>Link3</a>
<a>Link4</a>
<a>Link5</a>
这里的自然标签顺序是链接1,2,3,4,5。是否可以将标签顺序更改为1,2,3,5,4而不设置1,2和3的标签索引?
在真实环境中,我需要在扩展菜单后重新排列两个元素,因此我不知道选项卡索引的数值。
也欢迎基于javascript / jquery的解决方案。
答案 0 :(得分:1)
如果不改变tabindex堆栈,就无法解决这个问题。但是,您可以非常轻松地编写一个小插件,该插件可以将焦点转换为其他内容。但这很麻烦,我强烈建议反对它。
然而,你可以做的是在上面和下面有一个tabindex-stack。假设DOM中这些项目上方的所有对象都可以使用tabindex 10,并且下面的所有对象都可以使用tabindex 30。
对于您列出的项目,您可以强制选项卡索引在20到29之间。像这样:
在:
<div></div>
<div></div>
<div></div>
<div></div>
你的范围:
<a tabindex="20">Link1</a>
<a tabindex="20">Link2</a>
<a tabindex="20">Link3</a>
<a tabindex="20">Link4</a>
<a tabindex="20">Link5</a>
下:
<domobject tabindex="30"/>
<domobject tabindex="30"/>
<domobject tabindex="30"/>
<domobject tabindex="30"/>
这将强制Tabbing以正确的顺序通过DOM。但是,如果你在途中包含untabindex'ed对象,它们将获得与第一个块相同的选项卡索引 - 使一切变得奇怪和奇怪。
如果要切换范围的选项卡索引,可以在相应的“缓冲区”内进行相应更改(示例中为20-29):
<a tabindex="25">Link1</a>
<a tabindex="24">Link2</a>
<a tabindex="23">Link3</a>
<a tabindex="22">Link4</a>
<a tabindex="21">Link5</a>
这太乱了。
jQuery选项也很混乱,但它更清晰(更容易维护)。