如何使用选择器使用箭头键在元素间切换?
How to use a selector to tab through elements using arrow keys?
我正在尝试使用箭头键导航一系列元素,我可以成功地这样做:
Javascript:
$('div').keydown(function(e) {
if (e.keyCode==39) {
$('div').next(this).focus();
}
if (e.keyCode==37) {
$('div').prev(this).focus();
}
});
HTML:
<div tabindex='0'>
a
</div>
<div tabindex='0'>
b
</div>
<div tabindex='0'>
c
</div>
但是如果我在两个 divs
之间添加一个元素,就像这样:
<div tabindex='0'>
a
</div>
<span tabindex='0'>
wat
</span>
<div tabindex='0'>
b
</div>
<div tabindex='0'>
c
</div>
箭头键不会跳过 span
并停留在第二个和第三个 divs
上。请查看我的演示以了解我的实现:http://jsfiddle.net/obliviga/a0uz64xw/5/
我基本上希望箭头键的焦点仅保留在我选择的选择器上,以便跳过 span
。我不知道该怎么做。谢谢。
您需要使用 nextAll()
and prevAll()
along with :first
pseudo class selector since prev()
and next()
only selects immediate adjacent sibling. Where :first
正在帮助从集合中获取最近的一个。
$('div').keydown(function(e) {
if (e.keyCode==39) {
$(this).nextAll('div:first').focus();
}
if (e.keyCode==37) {
$(this).prev('div:first').focus();
}
});
$('div').keydown(function(e) {
if (e.keyCode == 39) {
$(this).nextAll('div:first').focus();
}
if (e.keyCode == 37) {
$(this).prevAll('div:first').focus();
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div tabindex='0'>
a
</div>
<span tabindex="0">
wat
</span>
<div tabindex='0'>
b
</div>
<div tabindex='0'>
c
</div>
我正在尝试使用箭头键导航一系列元素,我可以成功地这样做:
Javascript:
$('div').keydown(function(e) {
if (e.keyCode==39) {
$('div').next(this).focus();
}
if (e.keyCode==37) {
$('div').prev(this).focus();
}
});
HTML:
<div tabindex='0'>
a
</div>
<div tabindex='0'>
b
</div>
<div tabindex='0'>
c
</div>
但是如果我在两个 divs
之间添加一个元素,就像这样:
<div tabindex='0'>
a
</div>
<span tabindex='0'>
wat
</span>
<div tabindex='0'>
b
</div>
<div tabindex='0'>
c
</div>
箭头键不会跳过 span
并停留在第二个和第三个 divs
上。请查看我的演示以了解我的实现:http://jsfiddle.net/obliviga/a0uz64xw/5/
我基本上希望箭头键的焦点仅保留在我选择的选择器上,以便跳过 span
。我不知道该怎么做。谢谢。
您需要使用 nextAll()
and prevAll()
along with :first
pseudo class selector since prev()
and next()
only selects immediate adjacent sibling. Where :first
正在帮助从集合中获取最近的一个。
$('div').keydown(function(e) {
if (e.keyCode==39) {
$(this).nextAll('div:first').focus();
}
if (e.keyCode==37) {
$(this).prev('div:first').focus();
}
});
$('div').keydown(function(e) {
if (e.keyCode == 39) {
$(this).nextAll('div:first').focus();
}
if (e.keyCode == 37) {
$(this).prevAll('div:first').focus();
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div tabindex='0'>
a
</div>
<span tabindex="0">
wat
</span>
<div tabindex='0'>
b
</div>
<div tabindex='0'>
c
</div>