为什么 .next('li:visible') 或 .prev('li:visible') 不能跳过不可见的元素
Why can't .next('li:visible') or .prev('li:visible') not skip invisible elements?
我正在制作一个选择控件,该控件在"li"中显示选项列表,并允许用户在li中上下滚动。由于 li 可以被过滤,有时它们会通过".hide"呈现为不可见,给我以下标记:
<input type="text" id="comboBox" />
<ul id="comboBoxData">
<li style="display:none">1</li>
<li>12</li>
<li>123</li>
<li>1234</li>
<li style="display:none">12345</li>
<li style="display:none">123456</li>
<li>1234567</li>
<li>12345678</li>
</ul>
我有以下 JQuery 代码来处理箭头键控件:
$('#comboBox').bind('keypress', function(e) {
if (e.keyCode >= 38 && e.keyCode <= 41) {
if ($("#comboBoxData li.selected").length > 0) {
var current = $("#comboBoxData li.selected");
if (e.keyCode == 38) {
$("#comboBoxData li.selected").prev('li:visible').addClass('selected');
} else if (e.keyCode == 40) {
$("#comboBoxData li.selected").next('li:visible').addClass('selected');
}
current.removeClass('selected');
} else {
$("#comboBoxData li:visible:first").addClass('selected');
}
$("#comboBox").val($("#comboBoxData li.selected").html());
}
});
使用以下 CSS 来清楚地标记我选择了哪个元素:
.selected
{
background-color:Navy;
color:White;
}
我的问题是,在我给出的检查中,当用户按下"向下"按钮时,正在选择"12">的 LI,并且上下按钮在"12"向下到"1234"中正常工作,但是他们在那里停止并且找不到"1234567",因为设置为"显示"的两个 li 的间隙:没有'。有没有办法解决这个问题?也许是 .next(( 和 .previous(( 的替代品?
您需要
改用nextAll()
或prevAll()
。
next()
和 prev()
只有在与选择器匹配时才会匹配上一个/下一个元素。 nextAll()
和 prevAll()
在所有下一个/上一个元素中搜索匹配项。
要选择第一个上一个/下一个元素,请尝试;
nextAll('your-selector').first()
或
nextAll('your-selector:first')
您使用的方法仅适用于下一项,如果该项与选择器不匹配,则无法返回任何项。您需要使用 nextAll
或 prevAll
来收集所有可能的元素,以便使用选择器进行过滤。
看看这个jsfiddle:
http://jsfiddle.net/6WxAZ/2/
相关文章:
- 使用CSS或js,使用动态选择器选择任意li的下一个元素
- 引导程序:在导航栏中,显示悬停在单个位置的基于Li Link的不同内容
- 更改li标记文本的Javascript
- 完全可链接的li元素
- 使用jquery动态创建ul-li
- tiltSlider播放/暂停视频元素(如果li有当前类)
- 使用下拉列表筛选列表(ul>li)
- 在bootstrap中显示隐藏特定的li
- 将display属性更改为visible flicks,然后再次消失
- AngularJS Navigation (li ng-repeat, create header li), DOM
- 使用Jquery在li内部获取具有特定文本的锚点
- 隐藏/显示包含单词的ul li项目.但只能入住李的子女
- 如何将li类更改为li id's在Jquery中
- ul-li专属功能
- 在LI点击时更改类
- 如何使用jquery显示具体的li数
- 一个接一个地淡出每一个li
- 使用li元素的html内容更改该元素的背景
- 为什么 .next('li:visible') 或 .prev('li:visible') 不能跳过不可见的元素
- 在列表中存在隐藏li的情况下,在li上应用备用类,而不使用:visible