4.6.3 jQuery过滤器
jQuery还提供了一种方法,可以根据特定的特征过滤选择。例如,:even过滤器允许选择一个元素集合中的所有even元素。此外,还可以找到包含特定标签、特定文本的元素,找到隐藏不可见的元素甚至是不匹配某个特定选择器的元素。要使用过滤器,在主选择器后面添加一个冒号,然后是过滤器的名字。例如,要找到表中的每一个偶数行,可以像下面这样编写jQuery选择器:
$('tr:even')
这行代码选取了每个偶数<tr>标签。要缩小选择范围,我们可能想要找出表中拥有类名striped的每个偶数行。可以像下面这样做:
$('.striped tr:even')
:even还可以和其他的过滤器一起使用:
·:even和:odd在一组中分别选择偶数索引和奇数索引对应的元素。这些过滤器的作用有些不符合常规,但要记住一个jQuery选择是匹配特定选择器的所有元素的一个列表。在某种意义上,它们就像是数组一样的类型(参见本书2.8节)。一个jQuery选项中的每个元素都有一个索引编号,记住数组的索引值总是从0开始的(参见2.8.2节)。因此,既然:even作用于每个索引值上(例如,0、2和4),这个过滤器实际返回的是选择中的第1项、第3项和第5项(以此类推),换句话说,它真正选择的是每个奇数元素。:odd的工作方式相同,只不过它所选择的都是奇数索引编号(1、3、5等)。
·:first和:last选择一组中的第一个元素和最后一个元素。例如,如果想要选择一个页面的第一段,可以输入如下代码:
$('p:first');
要选择页面的最后一段,可以输入如下代码:
$('p:last');
·可以使用:not()找出不匹配一个特定选择器类型的元素。例如,假设要选择每个<a>标签,但除了那些拥有一个navButton类的标签之外。可以像下面这样做:
$('a:not(.navButton)');
把要忽略的选择器的名字传递给:not()函数。在这个例子中,.navButton是一个类选择器,因此,这段代码翻译为“不带有.navButton类”。可以把任何的jQuery过滤器以及大多数的jQuery选择器和:not()一起使用,例如,要找到不是以http://开头的每个链接,可以这样编写:
$('a:not([href^="http://"])')
·:has()找到包含了其他选择器的元素。例如,假设想要找到所有的<li>标签,但是只有其中拥有一个<a>的时候才选择它们。可以这么做:
$('li:has(a)')
这一设置和一个子孙选择器不同,因为它不是选择<a>;它在选择<li>标签,但是只有<li>标签中有一个链接的时候才选择。
·:contains()找出包含特定文本的元素。例如,要找到显示“Click Me!”的每个链接,可以创建如下所示的一个jQuery对象:
$('a:contains(Click Me!)')
·:hidden找到隐藏的元素,包括CSS的display属性设置为none(意味着不会在页面上看到它)的元素,使用jQuery的hide()函数隐藏的元素(参见6.1.1节),或者隐藏的表单字段(这个选择器不适用于那些CSS visibility属性设置为invisible的元素)。例如,假设已经隐藏了几个<div>标签,可以找到它们,然后使用jQuery使其可见,如下所示:
$('div:hidden').show();
这行代码对于页面上已经可见的<div>标签没有什么影响(我们将在6.1.1节学习jQuery的show()函数)。
·:visible是和:hidden相对应的属性。它找到页面上的可见元素。