:first过滤选择器

本章我们介绍过滤选择器,该类型的选择器是根据某过滤规则进行元素的匹配,书写时以“:”号开头,通常用于查找集合元素中的某一位置的单个元素。

在jQuery中,如果想得到一组相同标签元素中的第1个元素该怎样做呢?

在下面的示例代码中你可能注意到我们会使用

 $(“li:first”)

注意:书写时以“:”号开头。

Jquery 选择元素 的第一个 jquery类选择器选择第一个_选择器

运行结果:

Jquery 选择元素 的第一个 jquery类选择器选择第一个_Jquery 选择元素 的第一个_02

 

使用li:first过滤选择器可以很方便地获取ul列表中的第一个li元素.

:first过滤选择器的功与能是获取第一个元素,常常与其它选择器一起使用,获取指定的一组元素中的第一个元素。

例如:

:first与:last用法相同,使用:last给最后的li标签文字添加红色。

Jquery 选择元素 的第一个 jquery类选择器选择第一个_html_03

<!DOCTYPE html>
<html>
    <head>
        <title>:first过滤选择器</title>
        <script src="http://libs.baidu.com/jquery/1.9.0/jquery.js" type="text/javascript"></script>
        <link href="style.css" rel="stylesheet" type="text/css" />
    </head>
    
    <body>
        <div>改变最后一行"苹果"背景颜色:</div>
        <ol>
            <li>葡萄</li>
            <li>香蕉</li>
            <li>橘子</li>
            <li>西瓜</li>
            <li>苹果</li>
        </ol>
        
        <script type="text/javascript">
            $("li:last").css("background-color", "red");
        </script>
    </body>
</html>

:eq(index)过滤选择器

如果想从一组标签元素数组中,灵活选择任意的一个标签元素,我们可以使用

:eq(index)

其中参数index表示索引号(即:一个整数),它从0开始,如果index的值为3,表示选择的是第4个元素。例如:

Jquery 选择元素 的第一个 jquery类选择器选择第一个_选择器_04

在浏览器中显示的效果:

Jquery 选择元素 的第一个 jquery类选择器选择第一个_Jquery 选择元素 的第一个_05

从图中可以看出,通过调用$("li:eq(3)")过滤选择器代码,获取了第4个<li>元素,并使用css()方法设置了该元素在页面中显示的文字样式。

例如:

获取<li>子元素中的倒数第三个元素,并改变它显示的背景色。

Jquery 选择元素 的第一个 jquery类选择器选择第一个_Jquery 选择元素 的第一个_06

<!DOCTYPE html>
<html>
    <head>
    <title>:eq(index)过滤选择器</title>
    <link href="style.css" rel="stylesheet" type="text/css" />
    <script src="http://libs.baidu.com/jquery/1.9.0/jquery.js" type="text/javascript"></script>
    </head>
    
    <body>
        <div>改变中间行"葡萄"背景颜色:</div>
        <ol>
        <li>橘子</li>
        <li>香蕉</li>
        <li>葡萄</li>
        <li>苹果</li>
        <li>西瓜</li>
        </ol>
        
        <script type="text/javascript">
            $("li:eq(2)").css("background-color", "#60F");
        </script>
    </body>
</html>
<!DOCTYPE html>
<html>
    <head>
    <title>:eq(index)过滤选择器</title>
    <link href="style.css" rel="stylesheet" type="text/css" />
    <script src="http://libs.baidu.com/jquery/1.9.0/jquery.js" type="text/javascript"></script>
    </head>
    
    <body>
        <div>改变中间行"葡萄"背景颜色:</div>
        <ol>
        <li>橘子</li>
        <li>香蕉</li>
        <li>葡萄</li>
        <li>苹果</li>
        <li>西瓜</li>
        </ol>
        <ol>
            <li>juzi</li>
            <li>xiangjiao</li>
            <li>chengzi</li>
        </ol>
        <script type="text/javascript">
            $("li:eq(7)").css("background-color", "#60F");
            
        </script>
    </body>
</html>

Jquery 选择元素 的第一个 jquery类选择器选择第一个_css_07

:contains(text)过滤选择器

与上一节介绍的:eq(index)选择器按索引查找元素相比,有时候我们可能希望按照文本内容来查找一个或多个元素,那么使用:contains(text)选择器会更加方便, 它的功能是选择包含指定字符串的全部元素,它通常与其他元素结合使用,获取包含“text”字符串内容的全部元素对象。其中参数text表示页面中的文字。

例如:

Jquery 选择元素 的第一个 jquery类选择器选择第一个_html_08

在浏览器中显示的效果:

Jquery 选择元素 的第一个 jquery类选择器选择第一个_css_09

从图中可以看出,调用li:contains('土豪')代码,可以很方便地获取<li>中包含‘土豪’字符内容的全部元素,并且只要与选择的元素中或子元素中包含该字符内容,就可以被选中。

注意:li:contains('土豪')必须加单引号呢?因为它是一个字符串,而不是一个变量,所以不加单或双引号的话是会报错的。

例如:

使用:contains(text)选择器获取包含“jQuery”文字内容的全部元素,并改变它们显示的背景颜色。

Jquery 选择元素 的第一个 jquery类选择器选择第一个_选择器_10

<!DOCTYPE html>
<html>
    <head>
        <title>:contains(text)过滤选择器</title>
        <script src="http://libs.baidu.com/jquery/1.9.0/jquery.js" type="text/javascript"></script>
        <link href="style.css" rel="stylesheet" type="text/css" />
    </head>
    
    <body>
        <div>改变包含"jQuery"字符内容的背景色:</div>
        <ol>
            <li>强大的"jQuery"</li>
            <li>"javascript"也很实用</li>
            <li>"jQuery"前端必学</li>
            <li>"java"是一种开发语言</li>
            <li>前端利器——"jQuery"</li>
        </ol>
        
        <script type="text/javascript">
            $("li:contains('jQuery')").css("background", "green");
        </script>
    </body>
</html>

:has(selector)过滤选择器

除了在上一小节介绍的使用包含的字符串内容过滤元素之外,还可以使用包含的元素名称来过滤,:has(selector)过滤选择器的功能是获取选择器中包含指定元素名称的全部元素,其中selector参数就是包含的元素名称,是被包含元素。

例如:获取指定包含某个元素名的全部<li>元素,并改变它们显示文字的颜色,如下图所示:

Jquery 选择元素 的第一个 jquery类选择器选择第一个_html_11

在浏览器中显示的效果:

Jquery 选择元素 的第一个 jquery类选择器选择第一个_选择器_12

可以看出,通过使用$("li:has('p')")选择器代码,获取了包含<p>元素的全部<li>元素,并通过css方法改变了这些元素在页面中显示的文字样式。

例如:

使用:has(selector)选择器,获取包含<label>名称的全部<li>元素,并改变它们显示的背景色。

Jquery 选择元素 的第一个 jquery类选择器选择第一个_css_13

<!DOCTYPE html>
<html>
    <head>
        <title>:has(selector)过滤选择器</title>
        <script src="http://libs.baidu.com/jquery/1.9.0/jquery.js" type="text/javascript"></script>
        <link href="style.css" rel="stylesheet" type="text/css" />
    </head>
    
    <body>
        <div>改变包含"label"元素的背景色:</div>
        <ol>
            <li><p>我是P先生</p></li>
            <li><label>L妹纸就是我</label></li>
            <li><p>我也是P先生</p></li>
            <li><label>我也是L妹纸哦</label></li>
            <li><p>P先生就是我哦</p></li>
        </ol>
        
         <script type="text/javascript">
            $("li:has('label')").css("background-color", "blue");
        </script>
    </body>
</html>

:hidden过滤选择器

:hidden过滤选择器的功能是获取全部不可见的元素,这些不可见的元素中包括type属性值为hidden的元素。

例如,调用:hidden选择器获取不可见的<p>元素,并将该元素的内容显示在<div>元素中,如下图所示:

Jquery 选择元素 的第一个 jquery类选择器选择第一个_选择器_14

在浏览器中显示的效果:

Jquery 选择元素 的第一个 jquery类选择器选择第一个_选择器_15

从图中可以看出,先调用$("p:hidden")代码获取隐藏的<p>元素,并调用该元素的html()方法获取该元素中的内容,最后将该内容显示在<div>元素中。

<!DOCTYPE html>
<html>
    <head>
        <title>:hidden过滤选择器</title>
        <script src="http://libs.baidu.com/jquery/1.9.0/jquery.js" type="text/javascript"></script>
    </head>
    
    <body>
        <h3>显示隐藏元素的内容</h3>
        <input id="hidstr" type="hidden" value="我已隐藏起来"/>
        <div></div>
        
        <script type="text/javascript">
        var $strHTML = $("input:hidden").val();
        $("div").html($strHTML);
    </script>
    </body>
</html>

:visible过滤选择器

与上一节的:hidden过滤选择器相反,:visible过滤选择器获取的是全部可见的元素,也就是说,只要不将元素的display属性值设置为“none”,那么,都可以通过该选择器获取。

例如,使用:visible选择器获取可见的<p>元素,并将该元素的内容显示在<div>元素中,如下图所示:

Jquery 选择元素 的第一个 jquery类选择器选择第一个_Jquery 选择元素 的第一个_16

在浏览器中显示的效果:

Jquery 选择元素 的第一个 jquery类选择器选择第一个_css_17

从图中可以看出,调用$("p:visible")选择器代码,获取那个可见的<p>元素,并调用html()方法获取该元素的内容,最后将该内容显示在<div>元素中。

例如:

使用:visible选择器获取全部可见的<li>元素,并设置它们显示蓝色背景。

Jquery 选择元素 的第一个 jquery类选择器选择第一个_css_18

<!DOCTYPE html>
<html>
    <head>
        <title>:visible过滤选择器</title>
        <script src="http://libs.baidu.com/jquery/1.9.0/jquery.js" type="text/javascript"></script>
        <link href="style.css" rel="stylesheet" type="text/css" />
    </head>
    
    <body>
        <h3>修改可见“水果”的背景色</h3>
        <ul>
            <li style="display:none">橘子</li>
            <li style="display:block">香蕉</li>
            <li style="display:">葡萄</li>
            <li>苹果</li>
            <li style="display:none">西瓜</li>
        </ul>
        
        <script type="text/javascript">
            $("li:visible").css("background-color","blue");
        </script>
    </body>
</html>

[attribute=value]属性选择器

属性作为DOM元素的一个重要特征,也可以用于选择器中,从本节开始将介绍通过元素属性获取元素的选择器,[attribute=value]属性选择器的功能是获取与属性名和属性值完全相同的全部元素,其中[]是专用于属性选择器的括号符,参数attribute表示属性名称,value参数表示属性值。

例如,使用[attribute=value]属性选择器,获取指定属性名和对应值的全部<li>元素,并设置它们显示的文字颜色,如图所示:

Jquery 选择元素 的第一个 jquery类选择器选择第一个_css_19

在浏览器中显示的效果:

Jquery 选择元素 的第一个 jquery类选择器选择第一个_css_20

从图中可以看出,使用$("li[title='我最爱']")属性选择器代码,获取了2个<li>元素,并调用css()方法设置它们在页面中显示的文字颜色,另外,属性值中的‘’单引号可以不写,由于属性名与属性值是等号,因此,它们之间不是包含关系,而是完全相同。

例如:

使用[attribute=value]属性选择器,获取指定属性名和对应值的全部<li>元素,并设置它们显示的背景色。

Jquery 选择元素 的第一个 jquery类选择器选择第一个_选择器_21

<!DOCTYPE html>
<html>
    <head>
        <title>[attribute=value]属性选择器</title>
        <script src="http://libs.baidu.com/jquery/1.9.0/jquery.js" type="text/javascript"></script>    
        <link href="style.css" rel="stylesheet" type="text/css" />
    </head>
    
    <body>
        <h3>改变"title"属性值为"蔬菜"的背景色</h3>
        <ul>
            <li title="蔬菜">茄子</li>
            <li title="水果">香蕉</li>
            <li title="蔬菜">芹菜</li>
            <li title="水果">苹果</li>
            <li title="水果">西瓜</li>
        </ul>
        
        <script type="text/javascript">
            $("li[title='蔬菜']").css("background-color", "green");
        </script>
    </body>
</html>

[attribute!=value]属性选择器

与上一节介绍的[attribute=value]属性选择器正好相反,[attribute!=value]属性选择器的功能是获取不包含属性名,或者与属性名和属性值不相同的全部元素,其中[]是专用于属性选择器的括号符,参数attribute表示属性名称,value参数表示属性值。

例如,使用[attribute!=value]属性选择器,获取指定不包含属性名,或与属性名和对应值不同的全部<li>元素,并设置它们显示的文字颜色,如图所示:

Jquery 选择元素 的第一个 jquery类选择器选择第一个_选择器_22

在浏览器中显示的效果:

Jquery 选择元素 的第一个 jquery类选择器选择第一个_Jquery 选择元素 的第一个_23

可以看出,使用$("li[title!='我最爱']")属性选择器代码,获取了3个<li>元素,其中一个是不包含title属性名,另外两个的title属性值不等于“我最爱”,获取元素后并调用css()方法设置这些元素在页面中显示的文字颜色。

例如:

使用[attribute!=value]属性选择器,获取指定不包含属性名和对应值的全部<li>元素,并设置它们显示的背景色。

Jquery 选择元素 的第一个 jquery类选择器选择第一个_Jquery 选择元素 的第一个_24

<!DOCTYPE html>
<html>
    <head>
        <title>[attribute!=value]属性选择器</title>
        <script src="http://libs.baidu.com/jquery/1.9.0/jquery.js" type="text/javascript"></script>
        <link href="style.css" rel="stylesheet" type="text/css" />
    </head>
    
    <body>
        <h3>改变"title"属性值不为"蔬菜"的背景色</h3>
        <ul>
            <li title="蔬菜">茄子</li>
            <li title="水果">香蕉</li>
            <li title="蔬菜">芹菜</li>
            <li title="水果">苹果</li>
            <li title="水果">西瓜</li>
        </ul>
        
        <script type="text/javascript">
            $("li[title!='蔬菜']").css("background-color", "green");
        </script>
    </body>
</html>

[attribute*=value]属性选择器

介绍一个功能更为强大的属性选择器[attribute*=value],它可以获取属性值中包含指定内容的全部元素,其中[]是专用于属性选择器的括号符,参数attribute表示属性名称,value参数表示对应的属性值。

例如,使用[attribute*=value]属性选择器,获取属性值中包含某一指定内容的全部<li>元素,并设置它们显示的文字颜色,如下图所示:

Jquery 选择元素 的第一个 jquery类选择器选择第一个_html_25

在浏览器中显示的效果:

Jquery 选择元素 的第一个 jquery类选择器选择第一个_css_26

从图中可以看出,使用$("li[title*='最']")属性选择器代码,获取了3个<li>元素,这些元素的title属性值中都包含了“最”字符,获取这些元素后并调用css()方法设置这些元素在页面中显示的文字颜色。

例如:

使用[attribute*=value]属性选择器,获取属性值中包含指定字符标志的全部<li>元素,并设置它们显示绿色的背景。

Jquery 选择元素 的第一个 jquery类选择器选择第一个_css_27

<!DOCTYPE html>
<html>
    <head>
        <title>[attribute*=value]属性选择器</title>
        <script src="http://libs.baidu.com/jquery/1.9.0/jquery.js" type="text/javascript"></script>
        <link href="style.css" role="stylesheet" type="text/css" />
    </head>
    
    <body>
        <h3>改变"title"属性值包含"果"的背景色</h3>
        <ul>
            <li title="蔬菜">茄子</li>
            <li title="水果">香蕉</li>
            <li title="蔬菜">芹菜</li>
            <li title="人参果">小西红柿</li>
            <li title="水果">西瓜</li>
        </ul>
        
        <script type="text/javascript">
            $("li[title*='果']").css("background-color", "green");
        </script>
    </body>
</html>

:first-child子元素过滤选择器

通过上面章节的学习,我们知道使用:first过滤选择器可以获取指定父元素中的首个子元素,但该选择器返回的只有一个元素,并不是一个集合,而使用:first-child子元素过滤选择器则可以获取每个父元素中返回的首个子元素,它是一个集合,常用多个集合数据的选择处理。

如下图,如果想把页面中每个ul中的第一个li获取到,并改变其颜色。则可以使用

: first-child

Jquery 选择元素 的第一个 jquery类选择器选择第一个_Jquery 选择元素 的第一个_28

在浏览器中显示的效果:

Jquery 选择元素 的第一个 jquery类选择器选择第一个_选择器_29

通过$("li:first-child")选择器代码,获取了两个<ul>父元素中的第一个<li>元素,并使用css()方法修改了它们在页面中显示的文字颜色。

例如:

使用:first-child子元素过滤选择器,修改“蔬菜”和“水果”中第一个显示的背景色。

Jquery 选择元素 的第一个 jquery类选择器选择第一个_css_30

<!DOCTYPE html>
<html>
    <head>
        <title>:first-child子元素过滤选择器</title>
        <script src="http://libs.baidu.com/jquery/1.9.0/jquery.js" type="text/javascript"></script>
        <link href="style.css" rel="stylesheet" type="text/css" />
    </head>
    
    <body>
        <h3>改变每个"蔬菜水果"中第一行的背景色</h3>
        <ol>
            <li>芹菜</li>
            <li>茄子</li>
            <li>萝卜</li>
            <li>大白菜</li>
            <li>西红柿</li>
        </ol>
        <ol>
            <li>橘子</li>
            <li>香蕉</li>
            <li>葡萄</li>
            <li>苹果</li>
            <li>西瓜</li>
        </ol>
        
        <script type="text/javascript">
            $("li:first-child").css("background-color", "green");
        </script>
    </body>
</html>

:last-child子元素过滤选择器

:first-child子元素过滤选择器功能相反,:last-child子元素过滤选择器的功能是获取每个父元素中返回的最后一个子元素,它也是一个集合,常用多个集合数据的选择处理。

例如,使用:last-child子元素过滤选择器,修改“蔬菜”和“水果”中最后一个显示的文字颜色,如下图所示:

Jquery 选择元素 的第一个 jquery类选择器选择第一个_css_31

在浏览器中显示的效果:

Jquery 选择元素 的第一个 jquery类选择器选择第一个_Jquery 选择元素 的第一个_32

从图中可以看出,通过$("li:last-child")选择器代码,获取了两个<ul>父元素中的最后一个<li>元素,并使用css()方法修改了它们在页面中显示的文字颜色。

例如:

使用:last-child子元素过滤选择器,修改“蔬菜”和“水果”中最后一个显示的背景色。

Jquery 选择元素 的第一个 jquery类选择器选择第一个_css_33

<!DOCTYPE html>
<html>
    <head>
        <title>:last-child子元素过滤选择器</title>
        <script src="http://libs.baidu.com/jquery/1.9.0/jquery.js" type="text/javascript"></script>
        <link href="style.css" rel="stylesheet" type="text/css" />
    </head>
    
    <body>
        <h3>改变每个"蔬菜水果"中最后一行的背景色</h3>
        <ol>
            <li>芹菜</li>
            <li>茄子</li>
            <li>萝卜</li>
            <li>大白菜</li>
            <li>西红柿</li>
        </ol>
        <ol>
            <li>橘子</li>
            <li>香蕉</li>
            <li>葡萄</li>
            <li>苹果</li>
            <li>西瓜</li>
        </ol>
        
        <script type="text/javascript">
           $("li:last-child").css("background-color", "blue");
        </script>
    </body>
</html>

练习题:
在页面中,添加一个<ul>元素,里面放置多个(至少7个以上)的<li>元素,此外,再添加一个<a>元素.

 初始时:<ul>元素中仅显示5个<li>元素,其中包含还包括最后一个<li>元素,<a>元素中的显示"更多"字符.

  当点击"更多"链接时,自身内容变为"简化",同时,<ul>元素中显示全部的<li>元素.

  当点击"简化"链接时,自身内容变为"更多",同时,<ul>元素中仅显示包含最后一个<li>元素在内的5个元素.

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script src="http://libs.baidu.com/jquery/1.9.0/jquery.js" type="text/javascript"></script>
<title>挑战题</title>
</head>
<body>
    <ul>
        <li>001</li>
        <li>002</li>
        <li>003</li>
        <li>004</li>
        <li>005</li>
        <li>006</li>
        <li>007</li>
    </ul>
    <a  href="javascript:;">更多</a>
    <script>
        $(function(){
            $("li:eq(3)").css("display","none");
            $("li:eq(4)").css("display","none");
            $("a").click(function(){
                if($("a").text() === "更多"){
                    $("a").text("简化");
                    $("li:eq(3)").css("display","list-item");
                    $("li:eq(4)").css("display","list-item");
                }else{
                    $("a").text("更多");
                    $("li:eq(3)").css("display","none");
                    $("li:eq(4)").css("display","none");                    
                }
            });
        })
    </script>
</body>
</html>