我知道还有其他关于这个主题的问题,但我还没有得到任何工作,所以我再问一次:
我有一个html列表,如下所示:
<ul>
<li>Item one</li>
<li>Item two</li>
<li>Item three</li>
<li>Item four</li>
<li>Item five</li>
</ul>
使用jQuery可以隐藏一些li标记,使用.show()和.hide()可以看到一些。
<ul>
<li style="display: block">Item one</li>
<li style="display: none">Item two</li>
<li style="display: none">Item three</li>
<li style="display: block">Item four</li>
<li style="display: block">Item five</li>
</ul>
我还使用了另一个jQuery,它将一个类添加到一个li标记中,所以代码看起来像这样(代码只会将这个类添加到一个可见的li中):
<ul>
<li style="display: block" class="highlight">Item one</li>
<li style="display: none">Item two</li>
<li style="display: none">Item three</li>
<li style="display: block">Item four</li>
<li style="display: block">Item five</li>
</ul>
然后,我需要做的是,当一个事件发生时(在本例中,用户按下向下键),我希望带有类的li删除它的class,并将这个类添加到下一个可见的li中。我本以为这样就行了:
if (event.keyCode == '40') {
$('li.highlight').removeClass('highlight').next(':visible').addClass('highlight');
}
但这只有在下一个可见的li是下一个li的情况下才有效。如何让它在所有情况下都选择正确的元素?
发布于 2010-07-20 15:22:48
尝试:
$('li.highlight')
.removeClass('highlight')
.nextAll(':visible:first')
.addClass('highlight');
令人恼火且令人困惑的是,next将只选择下一个兄弟。您可以通过传入选择器进行过滤,这一事实使您认为它会一直运行,直到找到某些东西,但事实并非如此。过滤器表达式将导致next
仅在与传递的选择器匹配的情况下获取下一个元素。
请参阅
https://stackoverflow.com/questions/3291541
复制