2011-05-09 27 views
2

混淆標題,是吧?我試圖儘可能最好地解釋它。Javascript(jQuery):next()給我「li.next()」而不是「li」

我的意思是,如果我有這樣的菜單:

<ul> 
    <li> Home </li> 
    <li class="current"> Portfolio </li> 
    <li> Store </li> 
    <li> About </li> 
</ul> 

和使用的.next()方法來獲得從當前的下一個元素:

$('ul li.current').next() 

的結果選擇器是:

ul li.current.next() 

而不是真正的選擇器。我的意思是,我不能以CSS爲目標ul li.current.next()(因此它不是一個「真正的」選擇器)。真正的選擇器看起來像ul li

有什麼辦法可以得到下一個元素的「真實」選擇器嗎?

+0

可以顯示比這更多的js? – Neal 2011-05-09 18:27:26

+2

是什麼問題?你想獲得一個等效的CSS選擇器嗎? – 2011-05-09 18:28:36

+0

如果你做'var test = $('#ul li');警報(test.html的()); test = test.next(); alert(test.html());'是否按預期工作?我在想你的選擇器太窄而無法正常工作。 – Tejs 2011-05-09 18:30:03

回答

2

如果你想在相當於CSS選擇器,這將是:

ul li.current + li 

參見:Adjacent sibling selector

注:Not supported in IE6

另請注意,jQuery不使用CSS選擇器來匹配所有元素。選擇器語法與CSS類似(它是超集),因爲它似乎是最自然的方式。它使用瀏覽器提供的方法(例如querySelectorAll),但它也可以通過遍歷 DOM來查找元素。

例如你不能用CSS來匹配$('td').closest('tr'),因爲你不能用CSS「向上移動」。

我希望這回答你的問題,如果不是請澄清它。

+0

多數民衆贊成酷這不知道你可以做到這一點仍然學習CSS雖然哈哈ie6銖 – mcgrailm 2011-05-09 18:31:45

+0

+1爲好,徹底的解決方案。 – pixelbobby 2011-05-09 18:36:51

+0

事實證明,我不需要這樣做,但我仍然需要知道如何去做,並且您的解決方案能夠工作。謝謝! (我在6個月前停止支持IE6,所以不用擔心!) – qwerty 2011-05-09 19:09:22

0

$('ul li.current').next()將簡單地返回下一個<li>。它會返回

<li> Store </li> 
0

這工作:

$(document).ready(function() { 
    var $li = $("ul li.current").next(); 
    $li.css("font-weight", "bold"); 
}); 

或者你可以跳過VAR分配和訪問它是這樣的:

$("ul li.current").next().css("text-decoration", "underline"); 
相關問題