2011-05-09 56 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");