2012-04-25 53 views
1

好了,所以我有这个div包含一个UL:jQuery的如何获得与显示的第一个列表项:无

<html> 
<head> 
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js" ></script> 
<script type="text/javascript"> 
$(document).ready(function(){ 
    $("button").click(function(){ 
    alert($('#slider ul li[display="none"]:first').text()); 
    }); 
}); 
</script> 
<style type="text/css"> 
li 
{ 
display:inline; 
margin: 20px; 
} 
</style> 
</head> 
<body> 
<div id="slider" style="width:100%; overflow-x:hidden"><ul><li style="display:none">Steve 1</li><li style="display:none">Frank</li><li>Tim</li><li>Steve</li><li>Frank</li><li>Tim</li><li>Steve</li><li>Frank</li><li>Tim</li><li>Steve</li><li>Frank</li><li>Tim</li><li>Steve</li><li>Frank</li><li>Tim</li><li>Steve</li><li>Frank</li><li>Tim</li><ul> 
</div> 
<button type="button" style="float:left">Previous</button><div style="float:right">Next</div> 
</body> 
</html> 

我希望发生的是,当你按上一个按钮,它会发现列表中的第一个项目显示为none,并显示包含其内容的消息。在这种情况下Steve1。

所以我用$('#slider ul li[display="none"]:first')这意味着它应该找到div命名的滑块,它是ul中的第一个列表项,其中display:none。

我在消息中得到一个空白。

任何人都知道我在做什么错。

我认为它有与我构造的部分属性做的:

http://api.jquery.com/attribute-equals-selector/

+0

它不因为没有'display =“none”'这样的东西。 – Sparky 2012-04-25 03:43:41

回答

2
$('#slider ul li[style="display:none"]:first') 

方括号基于属性选择元素。没有display属性。但是可以使用style属性。如果style属性有其他风格的不仅仅是display:none那么你可以使用一个RegExp选择:

$('#slider ul li[style*="display:none"]:first') 

的asterik(*)表示字符串可以在任何地方存在的属性的实际值内。

这里是一个演示:http://jsfiddle.net/TAv3d/

文档的jQuery选择:http://api.jquery.com/category/selectors/

或者您可以使用功能DOM遍历(这是一个快一点):

$('#slider').children('ul').children('li').filter('[style="display:none"]').first(); 
8

$('#slider ul li:hidden:first')是你在找什么

http://api.jquery.com/hidden-selector/

:hidden下列条件相匹配,根据以上链接

元素可以被认为是隐藏的几个原因:

  1. 他们有没有的CSS显示值。
  2. 它们是type =“hidden”的表单元素。
  3. 它们的宽度和高度明确设置为0.
  4. 祖先元素被隐藏,因此元素不会显示在页面上。