2013-02-26 23 views
2

简短的问题:是否存在的$this.nextAll().filter(':visible').eq(0).next.nextUntil jQuery的功能等同?jQuery的。接下来和伪选择

场景:我有3 li,其中第二li隐藏。现在,我该如何选择第三lithis#test

<ul> 
    <li id="test">Item 1</li> <!-- From this li --> 
    <li style="display: none">Item 2</li> 
    <li>Item 3</li> <!-- Select this li using :visible --> 
</ul> 

DEMO:http://jsfiddle.net/LgCuk/1/

注:以上只是一个例子,实际的名单是巨大的,元素是随机隐藏。所以我正在寻找一些可以接下来看到的东西li

+0

你的意思是像'$ this.nextUntil( ':可见')next()的CSS( '颜色', '红'); '? – j08691 2013-02-26 21:04:06

+0

@ j08691对于穆萨的问题,这似乎是唯一正确的答案。 – 2013-02-26 21:05:57

+0

让我知道我是否应该将其作为答案发布。 – j08691 2013-02-26 21:07:03

回答

3

使用.next().nextUntil()可以让你不必遍历整个列表,并在第一个找到匹配(.nextUntil())将停止,然后选择你想要的元素(.next())。它比直线.nextAll()便宜。

var $this = $('#test'); 
$this.nextUntil(':visible').next().css('color', 'red'); 

jsFiddle example

+1

这是完美的,如果我不得不迭代和打破,它将是相同的。谢谢! – 2013-02-26 21:12:51

+0

@Musa =维加说,“我在寻找一些可以挑选下一个可见的李的东西”。你的小提琴似乎只是表明了,不是吗? – j08691 2013-02-26 21:27:33

+0

再次抱歉错误http://jsfiddle.net/mowglisanu/LgCuk/5/ – Musa 2013-02-26 21:31:16

1

如何

$this.nextAll(':visible:first') 

DEMO

+0

谢谢,但我想在第一个':visible'后面打破,而不是选择全部,过滤':visible'然后得到:first。 – 2013-02-26 21:04:20

+0

@Vega我不确定你在问什么,除非使用'.nextAll'不是一个选项。 – Musa 2013-02-26 21:09:10

+0

'.nextAll' - 返回所有元素,然后':visible'应用过滤器,然后':first'选择第一个元素。这是一个可以轻松避免的额外材料。 – 2013-02-26 21:11:51

0

对不起,你是对的。我原来的帖子不正确。这应该按照你想要的方式工作。

$(document).ready(function(){ 
$('li').each(function(index){ 
    if($(this).is(":visible")){ 
    alert(index + $(this).text()); 
    } 
}); 

});

+1

这不是你如何迭代jQuery对象中的元素。而不是OP要求的。 – 2013-02-26 21:07:13