JQuery 教程

jQuery 选择器:子元素选择器

本章将介绍 jQuery 选择器中的子元素选择器。

子元素选择器

:first-child

该选择器用于选取某个父元素下的第一个子元素(无论该元素是什么类型),仅当元素是其父元素的第一个子节点时才匹配。示例:

<p>我的特长:</p>
<ul>
    <li>擅长编写代码</li>
    <li>擅长户外生存</li>
    <li>擅长下厨</li>
    <li>擅长打篮球</li>
    <li>擅长唱歌,歌声悦耳动听</li>
    <li></li>
</ul>
<p>我的缺点:</p>
<ul>
    <li>喜欢熬夜</li>
    <li>不喜欢社交</li>
</ul>

运行代码,将选取所有 <ul> 元素下,作为其父元素第一个子节点的 <li> 元素。如下:

<li>擅长编写代码</li>
<li>喜欢熬夜</li>

:first-of-type

该选择器用于选取某个父元素下同类型元素中的第一个(按元素标签类型筛选),忽略其他类型的子元素,只匹配同类型的首个元素。示例:

<form lang="zh-CN">
    <p>我的特长:</p>
    <ul>
        <li>擅长编写代码</li>
        <li>擅长户外生存</li>
        <li>擅长下厨</li>
        <li>擅长打篮球</li>
        <li>擅长唱歌,歌声悦耳动听</li>
        <li></li>
    </ul>
    <p>我的缺点:</p>
    <ul>
        <li>喜欢熬夜</li>
        <li>不喜欢社交</li>
    </ul>
</form>

运行代码,将选取每一个 <form> 元素下,同类型(<ul> 类型)子元素中的第一个 <ul> 元素。如下:

<ul>
    <li>擅长编写代码</li>
    <li>擅长户外生存</li>
    <li>擅长下厨</li>
    <li>擅长打篮球</li>
    <li>擅长唱歌,歌声悦耳动听</li>
    <li></li>
</ul>

:last-child

该选择器用于选取某个父元素下的最后一个子元素(无论元素类型),仅当元素是其父元素的最后一个子节点时匹配。示例:

<p>我的特长:</p>
<ul>
    <li>擅长编写代码</li>
    <li>擅长户外生存</li>
    <li>擅长下厨</li>
    <li>擅长打篮球</li>
    <li>擅长唱歌,歌声悦耳动听</li>
    <li></li>
</ul>
<p>我的缺点:</p>
<ul>
    <li>喜欢熬夜</li>
    <li>不喜欢社交</li>
</ul>

运行代码,将选取所有 <ul> 元素下,作为其父元素最后一个子节点的 <li> 元素。如下:

<li></li>
<li>不喜欢社交</li>

:last-of-type

该选择器用于选取某个父元素下同类型元素中的最后一个(按元素标签类型筛选),忽略其他类型子元素,只匹配同类型的最后一个元素。示例:

<form lang="zh-CN">
    <p>我的特长:</p>
    <ul>
        <li>擅长编写代码</li>
        <li>擅长户外生存</li>
        <li>擅长下厨</li>
        <li>擅长打篮球</li>
        <li>擅长唱歌,歌声悦耳动听</li>
        <li></li>
    </ul>
    <p>我的缺点:</p>
    <ul>
        <li>喜欢熬夜</li>
        <li>不喜欢社交</li>
    </ul>
</form>

运行代码,将选取每一个 <form> 元素下,同类型(<ul> 类型)子元素中的最后一个 <ul> 元素。如下:

<ul>
    <li>喜欢熬夜</li>
    <li>不喜欢社交</li>
</ul>

:nth-child(n)

该选择器用于选取某个父元素下的第 n 个子元素(n 为数字 / 公式,如 2、even、odd、3n+1,索引从 1 开始),不区分元素类型,按所有子节点的顺序计数。

:nth-child(an + b) 其中的 an+b 就是 formula:

  • a:系数(整数,可正、可负、可为 0)

  • n:计数器(固定写法,代表从 0 开始的自然数:0,1,2,3,...)

  • b:偏移量(整数,可正、可负、可为 0)

例如:2n 等价于 even(偶数),2n+1 等价于 odd(奇数),3n+1 匹配每个第三个元素,从第一个开始。

示例:

<p>我的特长:</p>
<ul>
    <li>擅长编写代码</li>
    <li>擅长户外生存</li>
    <li>擅长下厨</li>
    <li>擅长打篮球</li>
    <li>擅长唱歌,歌声悦耳动听</li>
    <li></li>
</ul>
<p>我的缺点:</p>
<ul>
    <li>喜欢熬夜</li>
    <li>不喜欢社交</li>
</ul>

运行代码,将选取所有 <ul> 元素下,作为其父元素第一个子节点的 <li> 元素。如下:

<li>擅长编写代码</li>
<li>喜欢熬夜</li>

:nth-last-child(n)

该选择器用于选取某个父元素下倒数第 n 个子元素(n 为数字 / 公式,索引从 1 开始),不区分元素类型,从最后一个子节点往前计数。示例:

<p>我的特长:</p>
<ul>
    <li>擅长编写代码</li>
    <li>擅长户外生存</li>
    <li>擅长下厨</li>
    <li>擅长打篮球</li>
    <li>擅长唱歌,歌声悦耳动听</li>
    <li></li>
</ul>
<p>我的缺点:</p>
<ul>
    <li>喜欢熬夜</li>
    <li>不喜欢社交</li>
</ul>

运行代码,将选取所有 <ul> 元素下,作为其父元素倒数第一个(最后一个)子节点的 <li> 元素。如下:

<li></li>
<li>不喜欢社交</li>

:nth-last-of-type(n)

该选择器用于选取某个父元素下同类型元素中倒数第 n 个(n 为数字 / 公式),仅按同类型元素从后往前计数,忽略其他类型子元素。示例:

<form lang="zh-CN">
    <p>
        <label>姓名:</label>
        <input id="myName" type="text" name="name" placeholder="你的姓名" />
    </p>
    <fieldset>
        <legend>兴趣爱好</legend>
        <input type="checkbox" title="运动" /> <label>运动</label>
        <input type="checkbox" title="看书" checked="checked" /> <label>看书</label>
        <input type="checkbox" title="旅行" /> <label>旅行</label>
    </fieldset>
    <p>我的特长:</p>
    <ul>
        <li>擅长编写代码</li>
        <li>擅长户外生存</li>
        <li>擅长下厨</li>
        <li>擅长打篮球</li>
        <li>擅长唱歌,歌声悦耳动听</li>
        <li></li>
    </ul>
    <p>我的缺点:</p>
    <ul>
        <li>喜欢熬夜</li>
        <li>不喜欢社交</li>
    </ul>
    <p>
        <button type="submit">提交</button>
    </p>
</form>

运行代码,将选取每一个 <form> 元素下,同类型(<p> 类型)子元素中的倒数第一个(最后一个)<p> 元素。如下:

<p>
    <button type="submit">提交</button>
</p>

:nth-of-type(n)

该选择器用于选取某个父元素下同类型元素中的第 n 个(n 为数字 / 公式),仅按同类型元素的顺序计数,忽略其他类型子元素,索引从 1 开始。示例:

<form lang="zh-CN">
    <p>
        <label>姓名:</label>
        <input id="myName" type="text" name="name" placeholder="你的姓名" />
    </p>
    <fieldset>
        <legend>兴趣爱好</legend>
        <input type="checkbox" title="运动" /> <label>运动</label>
        <input type="checkbox" title="看书" checked="checked" /> <label>看书</label>
        <input type="checkbox" title="旅行" /> <label>旅行</label>
    </fieldset>
    <p>我的特长:</p>
    <ul>
        <li>擅长编写代码</li>
        <li>擅长户外生存</li>
        <li>擅长下厨</li>
        <li>擅长打篮球</li>
        <li>擅长唱歌,歌声悦耳动听</li>
        <li></li>
    </ul>
    <p>我的缺点:</p>
    <ul>
        <li>喜欢熬夜</li>
        <li>不喜欢社交</li>
    </ul>
    <p>
        <button type="submit">提交</button>
    </p>
</form>

运行代码,将选取每一个 <form> 元素下,同类型(<p> 类型)子元素中的第二个 <p> 元素。如下:

<p>我的特长:</p>

:only-child

选取某个父元素下唯一的子元素(父元素仅有这一个子节点,无论类型),若父元素有多个子节点则不匹配。示例:

<form lang="zh-CN">
    <p>
        <label>姓名:</label>
        <input id="myName" type="text" name="name" placeholder="你的姓名" />
    </p>
    <p>我的缺点:</p>
    <ul>
        <li>喜欢熬夜</li>
        <li>不喜欢社交</li>
    </ul>
    <p>
        <button type="submit">提交</button>
    </p>
</form>

运行代码,将选取所有 <p> 元素下,作为其父元素(<p>)唯一子节点的 <button> 元素。如下:

<button type="submit">提交</button>

:only-of-type

选取某个父元素下唯一的该类型子元素(父元素中只有这一个该类型的元素,可存在其他类型子元素)。示例:

<form lang="zh-CN">
    <p>
        <label>姓名:</label>
        <input id="myName" type="text" name="name" placeholder="你的姓名" />
    </p>
    <p>我的缺点:</p>
    <ul>
        <li>喜欢熬夜</li>
        <li>不喜欢社交</li>
    </ul>
    <p>
        <button type="submit">提交</button>
    </p>
</form>

运行代码,将选取所有 <p> 元素下,作为其父元素(<p>)中唯一的 <input> 类型子元素的 <input> 元素。如下:

<input id="myName" type="text" name="name" placeholder="你的姓名" />

演示示例

下面通过一个示例演示各个选择器的含义,通过为选中的元素添加样式,直观查看个基本选择器的效果。

示例:

<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>JQeury 教程:选择器</title>
    <!-- 引入 jQuery 库 -->
    <script type="text/javascript" src="https://www.hxstrive.com/cdn/libs/jquery/3.7.1/jquery.min.js"></script>
    <!-- 引入 loglevel 库,方便在 DOM 中打印日志 -->
    <script src="https://www.hxstrive.com/preview_code/libs/custom_loglevel.js"></script>
    <style>
        div { margin:20px; }
        button { background: #EEE !important; border: 1px solid #ccc !important;
            min-width: 40px; padding: 5px; margin: 5px; cursor: pointer; }
        sup {color: red; font-size: 12px; background: transparent !important;}
        ul li { margin: 3px 0;}
        h3 { font-size: 18px; }

        /* 效果样式 */
        .myClass {
            box-shadow: inset 0 0 5px red;
        }
    </style>
</head>
<body>

    <div class="app">
        <h3>子元素选择器</h3>
        <form lang="zh-CN">
            <p>
                <label>姓名:</label>
                <input id="myName" type="text" name="name" placeholder="你的姓名" />
            </p>
            <fieldset>
                <legend>兴趣爱好</legend>
                <input type="checkbox" title="运动" /> <label>运动</label>
                <input type="checkbox" title="看书" checked="checked" /> <label>看书</label>
                <input type="checkbox" title="旅行" /> <label>旅行</label>
            </fieldset>
            <p>我的特长:</p>
            <ul>
                <li>擅长编写代码</li>
                <li>擅长户外生存</li>
                <li>擅长下厨</li>
                <li>擅长打篮球</li>
                <li>擅长唱歌,歌声悦耳动听</li>
                <li></li>
            </ul>
            <p>我的缺点:</p>
            <ul>
                <li>喜欢熬夜</li>
                <li>不喜欢社交</li>
            </ul>
            <p>
                <button type="submit">提交</button>
            </p>
        </form>
    </div>

    <div>
        <!-- :first-child 
            匹配所给选择器 (:之前的选择器) 的第一个子元素
            类似的 :first 匹配第一个元素,但是 :first-child选择器可以匹配多个:即为每个父级元素匹配第一个子元素。
            这相当于:nth-child(1),例如:$("ul li:first-child") -->
        <button type="button" onclick="
                reset(); 
                $('ul li:first-child').addClass('myClass');
            ">ul li:first-child</button>
        
        <!-- :first-of-type 1.9+
            结构化伪类,匹配E的父元素的第一个 E 类型的孩子。等价于 :nth-of-type(1) 选择器。 -->
        <button type="button" onclick="
                reset();
                // 匹配 form 下第一个 ul 元素
                $('form ul:first-of-type').addClass('myClass');
            ">form ul:first-of-type</button>
        
        <!-- :last-child 匹配最后一个子元素
            :last 只匹配最后一个元素,而此选择符将为每个父元素匹配最后一个子元素 -->
        <button type="button" onclick="
                reset();
                $('ul li:last-child').addClass('myClass');
            ">ul li:last-child</button>

        <!-- :last-of-type 1.9+
            结构化伪类,匹配 E 的父元素的最后一个 E 类型的孩子 -->
        <button type="button" onclick="
                reset();
                // 匹配 form 下最后一个 ul 元素
                $('form ul:last-of-type').addClass('myClass');
            ">form ul:last-of-type</button>

        <!-- :nth-child(n|even|odd|formula)
            匹配其父元素下的第N个子或奇偶元素
            :eq(index) 匹配选择器指定序列的元素,而这个将为每一个父元素匹配子元素。 -->
        <button type="button" onclick="
                reset();
                // 匹配 ul 下的第一个 li 子元素
                $('ul li:nth-child(1)').addClass('myClass');
            ">ul li:nth-child(1)</button>
        <button type="button" onclick="
                reset();
                // 匹配 ul 下的偶数 li 子元素
                $('ul li:nth-child(even)').addClass('myClass');
            ">ul li:nth-child(even)</button>
        <button type="button" onclick="
                reset();
                // 匹配 ul 下的奇数 li 子元素
                $('ul li:nth-child(odd)').addClass('myClass');
            ">ul li:nth-child(odd)</button>
        <button type="button" onclick="
                reset();
                // :nth-child(an + b) 其中的 an+b 就是 formula
                // a:系数(整数,可正、可负、可为 0)
                // n:计数器(固定写法,代表从 0 开始的自然数:0,1,2,3,...)
                // b:偏移量(整数,可正、可负、可为 0)
                //
                // 例如:2n 等价于 even(偶数),2n+1 等价于 odd(奇数)
                // 
                // 3n+1 匹配每个第三个元素,从第一个开始
                $('ul li:nth-child(3n+1)').addClass('myClass');
            ">ul li:nth-child(3n+1)</button>

        <!-- :nth-last-child(n|even|odd|formula) 1.9+
            选择所有他们父元素的第n个子元素。计数从最后一个元素开始到第一个。 -->
        <button type="button" onclick="
                reset();
                // 匹配倒数第一个 li 子元素
                $('ul li:nth-last-child(1)').addClass('myClass');
            ">ul li:nth-last-child(1)</button>

        <!-- :nth-last-of-type(n|even|odd|formula)1.9+
            选择的所有他们的父级元素的第n个子元素,计数从最后一个元素到第一个。 -->
        <button type="button" onclick="
                reset();
                // 匹配倒数第一个 p 子元素
                $('form p:nth-last-of-type(1)').addClass('myClass');
            ">form p:nth-last-of-type(1)</button>

        <!-- :nth-of-type(n|even|odd|formula) 1.9+
            选择同属于一个父元素之下,并且标签名相同的子元素中的第n个。 -->
        <button type="button" onclick="
                reset();
                // 匹配 form 下第二个 p 子元素
                $('form p:nth-of-type(2)').addClass('myClass');
            ">form p:nth-of-type(2)</button>

        <!-- :only-child
            如果某个元素是父元素中唯一的子元素,那将会被匹配 -->
        <button type="button" onclick="
                reset();
                $('p button:only-child').addClass('myClass');
            ">p button:only-child</button>

        <!-- :only-of-type 1.9+
            选择所有没有兄弟元素,且具有相同的元素名称的元素。 -->
        <button type="button" onclick="
                reset();
                $('p input:only-of-type').addClass('myClass');
            ">p input:only-of-type</button>
    </div>

    <script>
        function reset() {
            $('*').removeClass('myClass');
        }
    </script>
    
</body>
</html>

看看效果👉自己动手试一试 »

更多关于 jQuery 的知识请阅读后续教程。

  

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
其他应用
公众号