JQuery 教程

jQuery 选择器:基本筛选器

本章将介绍 jQuery 选择器中的基本筛选器,其中包含 :first、:even、:header 等等。

基本筛选器

:first

在匹配的元素集合中,选取第一个元素。例如:

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

运行 $('li:first') 代码,将选择如下元素:

<li>擅长编写代码</li>

:not(selector)

排除匹配指定选择器的元素,只选取不满足该选择器条件的元素。例如:

<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>

运行 $('input:not(:checked)') 代码,将选择如下元素:

<input id="myName" type="text" name="name" placeholder="你的姓名" />
<input type="checkbox" title="运动" />
<input type="checkbox" title="旅行" />

:even

选取匹配元素集合中索引为偶数的元素(索引从 0 开始)。例如:

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

运行 $('li:even') 代码,将选择如下元素:

<li>擅长编写代码</li>
<li>擅长下厨</li>
<li>擅长唱歌,歌声悦耳动听</li>

:odd

选取匹配元素集合中索引为奇数的元素(索引从 0 开始)。例如:

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

运行 $('li:odd') 代码,将选择如下元素:

<li>擅长户外生存</li>
<li>擅长打篮球</li>

:eq(index)

选取匹配元素集合中索引等于指定数值(index)的元素,index 支持负数(如 -1 表示最后一个元素)。例如:

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

运行 代码,将选择如下元素:

<li>擅长下厨</li>

:gt(index)

选取匹配元素集合中索引大于指定数值(index)的元素。例如:

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

运行 代码,将选择如下元素:

<li>擅长打篮球</li>
<li>擅长唱歌,歌声悦耳动听</li>

:lang(language)

选取带有指定语言属性(lang)的元素,language 为语言代码(如 zh、en 等)。例如:

<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>

运行 $(':lang(zh) input') 代码,将选择如下元素:

<input id="myName" type="text" name="name" placeholder="你的姓名" />
<input type="checkbox" title="运动" />
<input type="checkbox" title="旅行" />

:last

在匹配的元素集合中,选取最后一个元素。例如:

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

运行 $('li:last') 代码,将选择如下元素:

<li>擅长唱歌,歌声悦耳动听</li>

:lt(index)

选取匹配元素集合中索引小于指定数值(index)的元素。例如:

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

运行 $('li:lt(2)') 代码,将选择如下元素:

<li>擅长编写代码</li>
<li>擅长户外生存</li>

:header

选取所有 HTML 标题元素,包括 h1、h2、h3、h4、h5、h6。例如:

<h3>基本筛选器</h3>
<form lang="zh-CN">
    <p>
        <label>姓名:</label>
        <input id="myName" type="text" name="name" placeholder="你的姓名" />
    </p>
</form>

运行 $(':header') 代码,将选择如下元素:

<h3>基本筛选器</h3>

:animated

选取当前正在执行 jQuery 动画的元素(不包含原生 CSS 动画)。

:focus

选取当前获得焦点的元素(如输入框、按钮等可聚焦元素)。例如:

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

先运行如下代码:

// 聚焦到姓名输入框
$('#myName').focus();

再运行 $('input:focus') 代码,将选择如下元素:

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

:root

选取文档的根元素,在 HTML 文档中固定为 <html> 标签。

:target

选取与当前 URL 锚点(# 后的内容)匹配的元素,即被激活的锚点目标元素。例如:

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

如果此时访问的URL地址为 http://127.0.0.1:3000/preview_code/JQuery/tutorial/selector/jquery_selector_demo3.html#myName  ,可以通过下面代码添加锚点: 

// 自动在 location 地址后面添加 #myName 锚点
window.location.hash = '#myName';

运行 $(':target') 代码,将选择如下元素:

<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; }
    </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>
            </ul>
        </form>
    </div>

    <!-- 基本筛选器 -->
    <!-- 注意,下面为了演示方便,特意将JS代码卸载 onclick 事件中,不值得效仿 -->
    <div>
        <button type="button" onclick="
                reset();
                // :first 过滤, 获取匹配的第一个元素
                $('li:first').css('box-shadow', 'inset 0 0 5px red');
            ">li:first</button>

        <button type="button" onclick="
                reset();
                // :last 过滤, 查找所有未选中的 input 元素
                console.log($('input:not(:checked)'))
                $('input:not(:checked)').css('box-shadow', 'inset 0 0 5px red');
            ">input:not(:checked)</button>

        <button type="button" onclick="
                reset();
                // 查找 li 的 1、3、5...行(即索引值 0、2、4...)
                $('li:even').css('box-shadow', 'inset 0 0 5px red');
            ">li:even</button>

        <button type="button" onclick="
                reset();
                // 查找 li 的 2、4、6...行(即索引值 1、3、5...)
                $('li:odd').css('box-shadow', 'inset 0 0 5px red');
            ">li:odd</button>
        
        <button type="button" onclick="
                reset();
                // 查找索引值为 index 的元素,index 从 0 开始计算
                $('li:eq(2)').css('box-shadow', 'inset 0 0 5px red');
            ">li:eq(2)</button>
        
        <button type="button" onclick="
                reset();
                // 查找索引值大于 index 的元素,index 从 0 开始计算
                $('li:gt(2)').css('box-shadow', 'inset 0 0 5px red');
            ">li:gt(2)</button>
        
        <button type="button" onclick="
                reset();
                // 查找索引值小于 index 的元素,index 从 0 开始计算
                $('li:lt(2)').css('box-shadow', 'inset 0 0 5px red');
            ">li:lt(2)</button>
        
        <button type="button" onclick="
                reset();
                // 获取匹配的最后一个元素
                $('li:last').css('box-shadow', 'inset 0 0 5px red');
            ">:last</button>
        
        <button type="button" onclick="
                reset();
                // 匹配如 h1, h2, h3之类的标题元素
                $(':header').css('box-shadow', 'inset 0 0 5px red')
            ">:header</button>
        
        <button type="button" onclick="
                reset();
                // 添加动画效果,比如放大字体、改变颜色等,后续介绍动画
                $('h3').animate({
                    fontSize: '26px'    // 字体从 18px 变大到 26px
                }, 1000, function() {
                    // 动画结束后反向动画(恢复初始状态)
                    $(this).animate({
                        fontSize: '18px'
                    }, 800);
                });
                // 匹配所有正在执行动画效果的元素
                $(':animated').css('box-shadow', 'inset 0 0 5px red');
            ">:animated</button>
        
        <button type="button" onclick="
                reset();
                // 聚焦到姓名输入框
                $('#myName').focus();
                // 匹配当前获取焦点的元素, 比如 input, textarea 等元素
                $('input:focus').css('box-shadow', 'inset 0 0 5px red');
            ">:focus</button>

        <button type="button" onclick="
                reset();
                // 选择指定语言的所有元素
                // :lang选择器,匹配有一个语言值等于所提供的语言代码,或以提供的语言代码开始,后面马上跟一个“ - ”的元素
                // 例如,选择器 $('div:lang(en)') 将匹配 <div lang='en'> 和 <div lang='en-us'>(和他们的后代<div>),但不包括 <div lang='fr'></div>
                $(':lang(zh) input').css('box-shadow', 'inset 0 0 5px red');
            ">:lang<sup>1.9+</sup></button>
        
        <button type="button" onclick="
                reset();
                // 选择该文档的根元素, 即 <html> 元素
                $(':root').css('box-shadow', 'inset 0 0 5px red');
            ">:root<sup>1.9+</sup></button>
        
        <button type="button" onclick="
                reset();
                // 自动在 location 地址后面添加 #myName 锚点
                window.location.hash = '#myName';
                // 选择由文档URI的格式化识别码表示的目标元素。
                // 例如,给定的URI http://example.com/#foo, $('p:target'),将选择 <p id='foo'></p> 元素
                $(':target').css('box-shadow', 'inset 0 0 5px red');
            ">:target<sup>1.9+</sup></button>
    </div>
    
    <script>
        function reset() {
            $('*').removeClass('myAnimation').css('box-shadow', 'none');
        }
    </script>
</body>
</html>

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

运行示例,点击“li:first”按钮效果如下图:

image.png

你可以点击其他按钮,查看其他选择器的效果。

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

  

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