购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

4.5 层次选择器

所谓的层级选择器,就是根据页面DOM元素之间的父子关系作为匹配的筛选条件。首先学习一下页面上元素的关系。例如,下面的代码是最为常用也是最简单的DOM元素结构。

    <html>
        <head>  </head>
        <body>  </body>
    </html>

在这段代码所示的页面结构中,html元素是页面上其他所有元素的祖先元素,那么head元素就是html元素的子元素,同时html元素也是head元素的父元素。页面上的head元素与body元素是同辈元素。也就是说html元素是head元素和body元素的“爸爸”,head元素和body元素是html元素的“儿子”,head元素与body元素是“兄弟”。具体关系如图4.9所示。

图4.9 元素层级关系示意图

在了解了页面上元素的关系后,我们再来介绍jQuery提供的层级选择器。jQuery提供了Ancestor descendant选择器、parent > child选择器、prev + next选择器和prev ~ siblings选择器,下面进行详细介绍。

4.5.1 ancestor descendant选择器

ancestor descendant选择器中的ancestor代表祖先,descendant代表子孙,用于在给定的祖先元素下匹配所有的后代元素。ancestor descendant选择器的使用方法如下:

    $("ancestor descendant");

ancestor是指任何有效的选择器。

descendant是用以匹配元素的选择器,并且它是ancestor所指定元素的后代元素。

例如,要匹配ul元素下的全部li元素,可以使用下面的jQuery代码:

    $("ul li");

【例4.5】 通过jQuery为版权列表设置样式。 (实例位置:光盘\TM\sl\4\5)

(1)创建一个名称为index.html的文件,在该文件的<head>标记中应用下面的语句引入jQuery库。

    <script type="text/javascript" src="../js/jquery-1.11.1.min.js"></script>

(2)在页面的<body>标记中,首先添加一个<div>标记,并在该<div>标记内添加一个<ul>标记及其子标记<li>,然后在<div>标记的后面再添加一个<ul>标记及其子标记<li>,代码如下:

    <div id="bottom">
    <ul>
        <li>技术服务热线:400-×××-1066 传真:0431-84××××× 6企业邮箱:mingri××××@mingri××××.com</li>
        <li>Copyright &copy; www.mrbccd.com All Rights Reserved! </li>
    </ul>
    </div>
    <ul>
        <li>技术服务热线:400-×××-1066 传真:0431-84×××××6 企业邮箱:mingri××××@mingri××××.com</li>
        <li>Copyright &copy; www.mrbccd.com All Rights Reserved! </li>
    </ul>

(3)编写CSS样式,通过ID选择符设置<div>标记的样式,并且编写一个类选择符copyright,用于设置<div>标记内的版权列表的样式,关键代码如下:

    <style type="text/css">
    #bottom{
        background-image:url(../Images/bg_bottom.jpg);  /*设置背景*/
        width:800px;                                 /*设置宽度*/
        height:58px;                                 /*设置高度*/
        clear: both;                                 /*设置左右两侧无浮动内容*/
        text-align:center;                           /*设置居中对齐*/
        padding-top:10px;                            /*设置顶边距*/
        font-size:9pt;                               /*设置字体大小*/
    }
    .copyright{
        color:#FFFFFF;     /*设置文字颜色*/
        list-style:none;   /*不显示项目符号*/
        line-height:20px;  /*设置行高*/
    }
    </style>

(4)在引入jQuery库的代码下方编写jQuery代码,匹配div元素的子元素ul,并为其添加CSS样式,具体代码如下:

    <script type="text/javascript">
    $(document).ready(function(){
      $("div ul").addClass("copyright");  //为div元素的子元素ul添加样式
    });
    </script>

运行本示例,将显示如图4.10所示的效果,其中上面的版权信息是通过jQuery添加样式的效果,下面的版权信息为默认的效果。

4.10 通过jQuery为版权列表设置样式

4.5.2 parent>child选择器

parent > child选择器中的parent代表父元素,child代表子元素,用于在给定的父元素下匹配所有的子元素。使用该选择器只能选择父元素的直接子元素。parent > child选择器的使用方法如下:

    $("parent > child");

parent是指任何有效的选择器。

child是用以匹配元素的选择器,并且它是parent元素的子元素。

例如,要匹配表单中所有的子元素input,可以使用下面的jQuery代码:

    $("form > input");

【例4.6】 为表单的直接子元素input换肤。 (实例位置:光盘\TM\sl\4\6)

(1)创建一个名称为index.html的文件,在该文件的<head>标记中应用下面的语句引入jQuery库。

    <script type="text/javascript" src="../js/jquery-1.11.1.min.js"></script>

(2)在页面的<body>标记中,添加一个表单,并在该表单中添加6个input元素,并且将“换肤”按钮用<span>标记括起来,关键代码如下:

    <form id="form1" name="form1" method="post" action="">
      姓&nbsp;&nbsp;名:<input type="text" name="name" id="name" />
      <br />
      籍&nbsp;&nbsp;贯:<input name="native" type="text" id="native" />
      <br />
      生&nbsp;&nbsp;日:<input type="text" name="birthday" id="birthday" />
      <br />
      E-mail:<input type="text" name="email" id="email" />
      <br />
      <span>
      <input type="button" name="change" id="change" value="换肤"/>
      </span>
      <input type="button" name="default" id="default" value="恢复默认"/>
      <br />
    </form>

(3)编写CSS样式,用于指定input元素的默认样式,并且添加一个用于改变input元素样式的CSS类,具体代码如下:

    <style type="text/css">
    input{
        margin:5px;                 /*设置input元素的外边距为5像素*/
    }
    .input {
        font-size: 12pt;            /*设置文字大小*/
        color: #333333;             /*设置文字颜色*/
        background-color:#cef;      /*设置背景颜色*/
        border: 1px solid #000000;  /*设置边框*/
    }
    </style>

(4)在引入jQuery库的代码下方编写jQuery代码,实现匹配表单元素的直接子元素并为其添加和移除CSS样式,具体代码如下:

    <script type="text/javascript">
    $(document).ready(function(){
        $("#change").click(function(){             //绑定"换肤"按钮的单击事件
             $("form > input").addClass("input");  //为表单元素的直接子元素input添加样式
        });
        $("#default").click(function(){            //绑定“恢复默认”按钮的单击事件
        $("form > input").removeClass("input");    //移除为表单元素的直接子元素input添加的样式
        });
    });
    </script>
说明

在上面的代码中,addClass()方法用于为元素添加CSS类,removeClass()方法用于为移除为元素添加的CSS类。

运行本实例,将显示如图4.11所示的效果,单击“换肤”按钮,将显示如图4.12所示的效果,单击“恢复默认”按钮,将再次显示如图4.13所示的效果。

图4.11 默认的效果

图4.12 单击“换肤”按钮之后的效果

图4.13 为“换肤”按钮添加CSS类的效果

在图4.12中,虽然“换肤”按钮也是form元素的子元素input,但由于该元素不是form元素的直接子元素,所以在执行换肤操作时,该按钮的样式并没有改变。如果将步骤(4)中的第4行和第7行的代码中的$("form > input")修改为$("form input"),那么单击“换肤”按钮后,将显示如图4.13所示的效果,即“换肤”按钮也将被添加CSS类。这也就是parent > child选择器和ancestor descendant选择器的区别。

4.5.3 prev+next选择器

prev + next选择器用于匹配所有紧接在prev元素后的next元素。其中,prev和next是两个相同级别的元素。prev + next选择器的使用方法如下:

    $("prev + next");

prev是指任何有效的选择器。

next是一个有效选择器并紧接着prev选择器。

例如,要匹配<div>标记后的<img>标记,可以使用下面的jQuery代码:

    $("div + img");

【例4.7】 筛选紧跟在<lable>标记后的<p>标记并改变匹配元素的背景颜色为淡蓝色。 (实例位置:光盘\TM\sl\4\7)

(1)创建一个名称为index.html的文件,在该文件的<head>标记中应用下面的语句引入jQuery库。

    <script type="text/javascript" src="../js/jquery-1.11.1.min.js"></script>

(2)在页面的<body>标记中,首先添加一个<div>标记,并在该<div>标记中添加两个<label>标记和<p>标记,其中第二对<label>标记和<p>标记用<fieldset>括起来,然后在<div>标记的下方再添加一个<p>标记,关键代码如下:

    <div>
       <label>第一个label</label>
       <p>第一个p</p>
       <fieldset>
           <label>第二个label</label>
           <p>第二个p</p>
       </fieldset>
    </div>
    <p>div外面的p</p>

(3)编写CSS样式,用于设置body元素的字体大小,并且添加一个用于设置背景的CSS类,具体代码如下:

    <style type="text/css">
         .background{background:#cef}
         body{font-size:12px;}
    </style>

(4)在引入jQuery库的代码下方编写jQuery代码,实现匹配label元素的同级元素p,并为其添加CSS类,具体代码如下:

    <script type="text/javascript" charset="GBK">
        $(document).ready(function() {
             $("label+p").addClass("background");//为匹配的元
    素添加CSS类
    });
    </script>

运行本实例,将显示如图4.14所示的效果。在图中可以看到“第一个p”和“第二个p”的段落被添加了背景,而“div外面的p”由于不是label元素的同级元素,所以没有被添加背景。

图4.14 将label元素的同级元素

4.5.4 prev~siblings选择器

prev ~ siblings选择器用于匹配prev元素之后的所有siblings元素。其中,prev和siblings是两个相同辈元素。prev ~ siblings选择器的使用方法如下:

    $("prev ~ siblings");

prev是指任何有效的选择器。

siblings是一个有效选择器并且它是prev选择器的同辈。

例如,要匹配div元素的同辈元素ul,可以使用下面的jQuery代码:

    $("div ~ ul");

【例4.8】 筛选页面中div元素的同辈元素。 (实例位置:光盘\TM\sl\4\8)

(1)创建一个名称为index.html的文件,在该文件的<head>标记中应用下面的语句引入jQuery库。

    <script type="text/javascript" src="../js/jquery-1.11.1.min.js"></script>

(2)在页面的<body>标记中,首先添加一个<div>标记,并在该<div>标记中添加两个<p>标记,然后在<div>标记的下方再添加一个<p>标记,关键代码如下:

    <div>
        <p>第一个p</p>
        <p>第二个p</p>
    </div>
    <p>div外面的p</p>

(3)编写CSS样式,用于设置body元素的字体大小,并且添加一个用于设置背景的CSS类,具体代码如下:

    <style type="text/css">
        .background{background:#cef}
        body{font-size:12px;}
    </style>

(4)在引入jQuery库的代码下方编写jQuery代码,实现匹配div元素的同辈元素p,并为其添加CSS类,具体代码如下:

    <script type="text/javascript" charset="GBK">
        $(document).ready(function() {
             $("div~p").addClass("background"); //为匹配的元素添
    加CSS类
        });
    </script>

运行本实例,将显示如图4.15所示的效果。在图中可以看到“div外面的p”被添加了背景,而“第一个p”和“第二个p”的段落由于它不是div元素的同辈元素,所以没有被添加背景。

图4.15 为div元素的同辈元素设置背景 RCPPBGsgAusEdVbKMyuo+1G1H4AWQ4hkkJ4Em4enzitDgWYMDK+45LLRHaASdtot

点击中间区域
呼出菜单
上一章
目录
下一章
×