6

我有一个<ul>

<ul>
<li>1</li>
<li>2</li>
<li>3</li>
<li style="display:none;">4</li>
<li class="curSelected">5</li>
<li>6</li>
</ul>

现在从<li>5 我想要前一个可见元素的引用,即<li>3

我怎么才能得到它?

我试过了$('li.curSelected').prev(":visible:last");

但这不起作用。

请帮忙。

4

4 回答 4

14

尝试这个:

$('li.curSelected').prevAll(":visible:first");

prev()仅返回所选元素之前的直接元素。prevAll()返回所有以前的。

于 2013-06-12T07:06:02.167 回答
7

您可以使用.prevUntil()最多搜索(但不包括)第一个可见项目,然后使用.prev()

$('.curSelected').prevUntil(':visible').prev()

更新

正如评论中所指出的,如果前一个项目已经可见,这将不起作用。不幸的是,没有最佳的 jQuery,所以这里有一个替代方案:

$prev = $('.curSelected')
do {
    $prev = $prev.prev();
} while ($prev.length && $prev.is(':hidden'));
于 2013-06-12T07:11:39.053 回答
4

由于 jQuery 遍历 dom,使用prev, 从当前到第一个,但只返回一个元素(前一个),你应该使用.prevAll.

$("li.curSelected").prevAll(":visible:first");

请参阅此示例的工作小提琴

于 2013-06-12T07:07:48.910 回答
0

这是我的例子。完美运行,任何浏览器。

var elem = $( some_thing ).next();
while( elem && elem[0] != undefined && !elem.is( ':visible' ) )
    elem = elem.next();
if( elem && elem[0] != undefined )
    elem.doSomething();
于 2016-03-21T09:06:39.193 回答