【jQuery】jQuery 选择器 ④ ( jQuery 筛选方法 | 方法分类场景 - 向下找后代、向上找祖先、同级找兄弟、范围限定查找 )

文章目录

  • [一、jQuery 筛选方法](#一、jQuery 筛选方法)
    • 1、核心概念
    • 2、核心特点
    • [3、分类场景 - 向下找后代、向上找祖先、同级找兄弟、范围限定查找](#3、分类场景 - 向下找后代、向上找祖先、同级找兄弟、范围限定查找)
    • [4、jQuery 筛选方法列举](#4、jQuery 筛选方法列举)
  • 二、代码示例
    • [1、代码示例 - 向下找后代](#1、代码示例 - 向下找后代)
    • [2、代码示例 - 向上找祖先](#2、代码示例 - 向上找祖先)
    • [3、代码示例 - 同级找兄弟](#3、代码示例 - 同级找兄弟)

一、jQuery 筛选方法


1、核心概念

jQuery 筛选方法 是 是 对 基础 " 父 / 子 / 兄 " 节点 查找的功能 的 增强 和 场景拓展 , 核心围绕 " 精准定位 DOM 节点 " 展开 , 从已知节点精准找关联节点 , 比基础选择器 更灵活、场景覆盖更广 ;

jQuery 筛选方法 相比 基础选择器 , 筛选方法具备 动态筛选、范围可控、查找方向灵活 三大核心优势 , 全部 基于已选取的 jQuery 对象 进行 链式调用 , 无需重新编写复杂选择器语法 , 能高效解决 " 从已知节点找关联节点 " 的复杂场景 , 如 : 找指定范围的兄弟、逐级向上找最近祖先、限定层级的后代等 ;

2、核心特点

jQuery 筛选方法 核心特点 :

  • 动态筛选 : 所有方法均可 传入 selector 作为筛选条件 , 只返回 符合条件的节点 , 而非全部关联节点 ;
  • 范围可控 : 提供 until 系列方法 , 可 精准限定查找的 " 终止边界 " , 避免获取无关节点 ;
  • 方向灵活 : 覆盖 " 向下找后代 ( find / children ) " 、 " 向上找祖先 ( closest / parents ) " 、 " 同级找兄弟 ( siblings / nextAll / prevAll ) " 全方向查找 ;
  • 链式调用 : 方法返回 jQuery 对象 , 可 直接继续 链式调用 其他 jQuery 方法 , 如 : $(".item").closest("ul").find("li") ;

3、分类场景 - 向下找后代、向上找祖先、同级找兄弟、范围限定查找

jQuery 筛选方法 分类使用场景 :

查找方向 代表方法 核心适用场景
向下找后代 find() / children() 从 当前节点 找所有后代 ( find ) 或 仅 直接子元素 ( children )
向上找祖先 closest() / parents() 找 最近的祖先 ( closest , 含自身 ) 或 所有祖先 ( parents )
同级找兄弟 siblings() / nextAll() / prevAll() 找 所有兄弟 ( siblings ) 、后续所有兄弟 ( nextAll ) 、前面所有兄弟 ( prevAll )
范围限定查找 nextUntil() / prevUntil() / parentsUntil() 查找 直到指定节点为止的关联节点 ( 不含终止节点 )

4、jQuery 筛选方法列举

方法名 功能说明 示例代码 示例说明
find(selector) 在当前元素的所有后代元素中查找匹配 selector 的元素 ( 比后代选择器更灵活 , 支持动态筛选 ) $(".box").find("p.active") 在类为 box 的元素下 , 查找所有包含 active 类的 p 后代元素
closest(selector) 从当前元素向上逐级查找最近的匹配 selector 的祖先元素 ( 包括自身 ) $("li").closest("ul") 从 li 元素向上找最近的 ul 祖先元素 ( 若 li 本身是 ul 则返回自身 )
siblings(selector) 查找当前元素所有同级兄弟元素 ( 可传 selector 过滤 ) , 替代基础的兄弟选择器 $(".active").siblings("li") 找到类为 active 的元素的所有 li 同级兄弟元素
nextAll(selector) 查找当前元素之后所有的同级兄弟元素 ( 可传 selector 过滤 ) $("h2").nextAll("p") 找到 h2 元素之后所有的 p 同级兄弟元素
prevAll(selector) 查找当前元素之前所有的同级兄弟元素 ( 可传 selector 过滤 ) $("li:eq(3)").prevAll("li") 找到索引为 3 的 li 之前所有的 li 元素
nextUntil(selector) 查找当前元素之后、直到匹配 selector 元素为止的所有 同级兄弟元素 ( 不包含终点 ) $("h3").nextUntil("h4") 找到 h3 之后到 h4 之前的所有同级元素
prevUntil(selector) 查找当前元素之前、直到匹配 selector 元素为止的所有 同级兄弟元素 ( 不包含终点 ) $("li:last").prevUntil("li:eq(1)") 找到最后一个 li 之前到索引为 1 的 li 之前的所有 li 元素
parents(selector) 查找当前元素所有祖先元素 ( 可传 selector 过滤 , 不包含根元素 ) $(".item").parents(".container") 找到类为 item 的元素所有类为 container 的祖先元素
parentsUntil(selector) 查找当前元素到匹配 selector 祖先元素为止的 所有祖先元素 ( 不包含终点 ) $("span").parentsUntil("div") 找到 span 元素到 div 祖先元素为止的所有中间祖先元素
children(selector) 查找当前元素所有直接子元素 ( 可传 selector 过滤 , 比子选择器更灵活 ) $("ul").children("li.active") 找到 ul 下所有类为 active 的直接子级 li 元素

二、代码示例


1、代码示例 - 向下找后代

代码示例 :

html 复制代码
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>jQuery 筛选方法</title>
    <script src="js/jquery.min.js"></script>
</head>

<body>
    <div id="box">div 标签 #box</div>
    <div class="nav">div 标签 .nav</div>
    <ol>
        <li class="ol_one">ol 下的 li 标签 1 .ol_one</li>
        <li class="ol_two">ol 下的 li 标签 2 .ol_two</li>
        <li class="ol_thr">ol 下的 li 标签 3 .ol_thr
            <p>ol li 下的 p 标签</p>
        </li>
    </ol>
    <ul>
        <li class="ul_one">ul 下的 li 标签 1 .ul_one</li>
        <li class="ul_two">ul 下的 li 标签 2 .ul_two</li>
        <li class="ul_thr">ul 下的 li 标签 3 .ul_thr
            <p>ul li 下的 p 标签</p>
        </li>
    </ul>

    <script>
        // 向下找后代 (find / children)
        console.log("===== 只找 直接子元素 =====");

        // 1. children() : 只找 直接子元素  ( 一级子元素 ) 
        var ol_children = $("ol").children();
        ol_children.css("color", "blue");
        console.log('$("ol").children() :');
        console.log(ol_children);

        console.log("===== 找 所有后代元素 =====");

        // 2. find() : 找 所有后代元素  ( 任意层级 ) 
        // 如果 li 下还有子元素,find能找到,children找不到
        var ul_find_p = $("ul").find("p");
        ul_find_p.css("color", "red");
        console.log('$("ul").find("p") :');
        console.log(ul_find_p);
    </script>
</body>

</html>

执行结果 :

var ol_children = $("ol").children() 代码查找出了 ol 标签下的直接子元素 , 3 个 li 元素 , 在控制台中打印出了这三个元素 ;

为其设置 蓝色字体 , 调用 .css("color", "blue") 代码 , 会将子元素也设置为蓝色字体 ;

var ul_find_p = $("ul").find("p") 代码 查找 ul 标签下的 p 标签 , find 方法可以查找多层的所有后代 ;

ul_find_p.css("color", "red") 将其设置成了 红色字体 ;

2、代码示例 - 向上找祖先

代码示例 :

html 复制代码
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>jQuery 筛选方法</title>
    <script src="js/jquery.min.js"></script>
</head>

<body>
    <div id="box">div 标签 #box</div>
    <div class="nav">div 标签 .nav</div>
    <ol>
        <li class="ol_one">ol 下的 li 标签 1 .ol_one</li>
        <li class="ol_two">ol 下的 li 标签 2 .ol_two</li>
        <li class="ol_thr">ol 下的 li 标签 3 .ol_thr
            <p class="ol_thr_p">ol li 下的 p 标签</p>
        </li>
    </ol>
    <ul>
        <li class="ul_one">ul 下的 li 标签 1 .ul_one</li>
        <li class="ul_two">ul 下的 li 标签 2 .ul_two</li>
        <li class="ul_thr">ul 下的 li 标签 3 .ul_thr
            <p class="ul_thr_p">ul li 下的 p 标签</p>
        </li>
    </ul>

    <script>
        // 向上找祖先 (closest / parents)
        console.log("===== 向上找祖先 =====");

        // 1. parents() : 找 所有祖先元素  ( 直到 html 根元素 ) 
        const olOneParents = $(".ol_one").parents();
        console.log(".ol_one 的所有祖先 ( parents )  : ", olOneParents); // 输出ol、body、html

        // 2. closest() : 找 最近的匹配祖先元素  ( 只找第一个符合条件的 ) 
        const olOneClosestOl = $(".ol_one").closest("ol");
        console.log(".ol_one 最近的 ol 祖先 ( closest )  : ", olOneClosestOl); // 只输出ol元素

        const olOneClosestBody = $(".ol_one").closest("body");
        console.log(".ol_one 最近的body祖先 ( closest )  : ", olOneClosestBody); // 只输出body元素
    </script>
</body>

</html>

执行结果 :

$(".ol_one").parents() 查找 ol_one 类元素的 所有祖先 , 其上面有 3 层 , ol_one 上层父元素是 ol 元素 , ol 的父元素是 body 元素 , body 的 父元素是 html 元素 ;

$(".ol_one").closest("ol") 是 查找 ol_one 类元素的 第一个 ol 元素 ;

$(".ol_one").closest("body") 是 查找 ol_one 类元素的 第一个 body 元素 ;

3、代码示例 - 同级找兄弟

代码示例 :

html 复制代码
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>jQuery 筛选方法</title>
    <script src="js/jquery.min.js"></script>
</head>

<body>
    <div id="box">div 标签 #box</div>
    <div class="nav">div 标签 .nav</div>
    <ol>
        <li class="ol_one">ol 下的 li 标签 1 .ol_one</li>
        <li class="ol_two">ol 下的 li 标签 2 .ol_two</li>
        <li class="ol_thr">ol 下的 li 标签 3 .ol_thr
            <p class="ol_thr_p">ol li 下的 p 标签</p>
        </li>
    </ol>
    <ul>
        <li class="ul_one">ul 下的 li 标签 1 .ul_one</li>
        <li class="ul_two">ul 下的 li 标签 2 .ul_two</li>
        <li class="ul_thr">ul 下的 li 标签 3 .ul_thr
            <p class="ul_thr_p">ul li 下的 p 标签</p>
        </li>
    </ul>

    <script>
        // 同级找兄弟 (siblings / nextAll / prevAll)
        console.log("===== 同级找兄弟 =====");

        // 1. siblings() : 找 所有同级兄弟元素  ( 前后都包含 ) 
        const olTwoSiblings = $(".ol_two").siblings();
        console.log(".ol_two 的所有兄弟 ( siblings ) : ", olTwoSiblings); // 输出.ol_one和.ol_thr

        // 2. nextAll() : 找 当前元素之后的所有同级兄弟 
        const olOneNextAll = $(".ol_one").nextAll();
        console.log(".ol_one 之后的所有兄弟 ( nextAll ) : ", olOneNextAll); // 输出.ol_two和.ol_thr

        // 3. prevAll() : 找 当前元素之前的所有同级兄弟 
        const ol_thrPrevAll = $(".ol_thr").prevAll();
        console.log(".ol_thr 之前的所有兄弟 ( prevAll ) : ", ol_thrPrevAll); // 输出.ol_one和.ol_two

        // 扩展 : 单独找下一个/上一个兄弟 ( next() / prev() ) 
        const olOneNext = $(".ol_one").next();
        console.log(".ol_one 下一个兄弟 ( next ) : ", olOneNext); // 只输出.ol_two
        const olTwoPrev = $(".ol_two").prev();
        console.log(".ol_two 上一个兄弟 ( prev ) : ", olTwoPrev); // 只输出.ol_one
    </script>
</body>

</html>

执行结果 :

$(".ol_two").siblings() 查找 同级兄弟节点 , 前后的兄弟节点元素都包括 ;

$(".ol_one").nextAll() 是 查找 当前节点 的 后面的 所有同级元素 ;

$(".ol_thr").prevAll() 是 查找 当前节点 的 前面的 所有同级元素 ;

$(".ol_one").next() 是 查找 当前节点元素 的 下一个兄弟元素 ;

$(".ol_two").prev() 是 查找 当前节点元素 的 上一个兄弟元素 ;

相关推荐
刘联其2 小时前
.net也可以用Electron开发跨平台的桌面程序了
前端·javascript·electron
前端 贾公子2 小时前
Node.js 如何处理 ES6 模块
前端·node.js·es6
pas1362 小时前
42-mini-vue 实现 transform 功能
前端·javascript·vue.js
你的代码我的心2 小时前
微信开发者工具开发网页,不支持tailwindcss v4怎么办?
开发语言·javascript·ecmascript
esmap2 小时前
OpenClaw与ESMAP AOA定位系统融合技术分析
前端·人工智能·计算机视觉·3d·ai·js
毕设源码-钟学长2 小时前
【开题答辩全过程】以 基于node.js vue的点餐系统的设计与实现为例,包含答辩的问题和答案
前端·vue.js·node.js
努力d小白2 小时前
leetcode438.找到字符串中所有字母异位词
java·javascript·算法
小白路过3 小时前
记录vue-cli-service serve启动本地服务卡住问题
前端·javascript·vue.js
We་ct3 小时前
LeetCode 1. 两数之和:两种高效解法(双指针 + Map)
前端·算法·leetcode·typescript·哈希算法