2013-02-26 22 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