news 2026/4/21 3:07:32

jQuery 遍历 - 后代

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
jQuery 遍历 - 后代

jQuery 遍历 - 后代元素 (Descendants)

在 jQuery 中,后代遍历用于从当前选中的元素向下查找其子元素、孙元素等所有后代节点。这是 DOM 操作中最常用的功能之一。

一、核心方法

1.children()- 获取直接子元素

只返回一级子元素(直接后代),不包含孙元素及更深层级的节点。

// 语法$(selector).children();$(selector).children("selector");// 可选:过滤特定子元素// 示例$("ul").children();// 返回 ul 下所有的直接子元素 (通常是 li)$("ul").children("li");// 返回 ul 下所有的直接 li 子元素$("div").children(".item");// 返回 div 下 class 为 item 的直接子元素

特点

  • 只遍历一层深度。
  • 忽略文本节点和注释节点,只返回元素节点。
  • 如果子元素嵌套了其他标签,不会递归获取更深层级。

2.find()- 获取所有后代元素

返回选中元素下的所有后代元素(包括子、孙、曾孙等所有层级)。

// 语法$(selector).find("selector");// 示例$("ul").find("li");// 返回 ul 下所有的 li (包括嵌套在 li 里的 li)$("div").find(".active");// 返回 div 下所有 class 为 active 的后代$("form").find("input");// 返回 form 下所有的 input 标签

特点

  • 递归遍历所有层级。
  • 必须传入选择器(不能像children()那样不带参数获取所有子元素,虽然带*选择器可以达到类似效果)。
  • 性能通常比children()稍慢,因为需要遍历更深的 DOM 树。

二、方法对比

方法遍历深度是否需选择器性能典型场景
children()仅直接子级可选获取列表项、直接容器
find()所有后代必须搜索表单控件、深层嵌套元素

示例对比

<divid="parent"><divclass="child"><divclass="grandchild">孙元素</div></div></div><script>$("#parent").children(".child");// 返回:.child (1个)$("#parent").find(".child");// 返回:.child (1个)$("#parent").children(".grandchild");// 返回:空 (0个)$("#parent").find(".grandchild");// 返回:.grandchild (1个)</script>

三、代码示例

场景 1:获取列表项并处理

<ulid="menu"><li>首页<ul><li>新闻</li><li>体育</li></ul></li><li>关于</li></ul><script>// 只获取一级菜单项 (直接子 li)$("#menu").children("li").css("font-weight","bold");// 获取所有菜单项 (包括嵌套的)$("#menu").find("li").css("color","blue");</script>

场景 2:表单数据收集

// 获取表单内所有的输入控件 (无论嵌套多深)varinputs=$("#myForm").find("input, select, textarea");inputs.each(function(){console.log($(this).attr("name"));});

场景 3:动态内容查找

// 在动态生成的内容块中查找特定元素$(".content-block").find(".error-message").show();

四、常用技巧

1. 组合使用childrenfind

// 获取 ul 的直接子 li,然后在这些 li 内部查找所有的 span$("ul").children("li").find("span").addClass("highlight");

2. 使用通配符选择器模拟“所有子元素”

// 获取 div 下所有直接子元素 (类似 children() 不带参数)$("div").children("*");

3. 链式调用与end()

$("div").find("p")// 切换到所有 p 后代.css("color","red").end()// 回到原来的 div.children("h2")// 切换到 div 的直接 h2 子元素.css("color","blue");

4. 性能优化

  • 如果确定只需要直接子元素,优先使用children(),性能更好。
  • 如果选择器很复杂,尽量在find()中直接写完整选择器,而不是链式调用多次。
    // 推荐 (一次查找)$("div").find("ul > li.active span");// 不推荐 (多次查找,性能较差)$("div").find("ul").children("li").filter(".active").find("span");

五、注意事项

  1. 文本节点children()find()只返回元素节点,不会返回文本节点或注释节点。如果需要处理文本,需使用.contents()
  2. 选择器必须find()必须传入选择器字符串,不能像children()那样省略。
  3. 上下文find()是在当前选中元素的内部查找,不会跨越到其他分支。
  4. 空结果:如果找不到匹配的元素,返回空的 jQuery 对象,不会报错。
  5. 性能:对于深层嵌套的 DOM,find()可能会遍历大量节点,注意选择器的精确度。

六、与其他遍历方法的关系

  • 向下children()(一级),find()(所有)
  • 向上parent()(一级),parents()(所有),parentsUntil()
  • 横向siblings(),next(),prev()
  • 混合contents()(包含文本/注释),closest()(向上查找匹配)

掌握children()find()的区别,是高效进行 jQuery DOM 操作的关键。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/21 3:06:18

SeanLib系列函数库-MyFlash

查看其它库函数说明&#xff0c;请点击此处跳转到SeanLib主页 1. 本篇内容 本篇提供了一个适用于STM32F429的片内Flash操作库&#xff0c;支持读&#xff08;一般不使用&#xff09;、扇区擦除、写&#xff08;按字节形式&#xff09;三个方法&#xff0c;相比于HAL库中的函数…

作者头像 李华
网站建设 2026/4/21 3:03:09

C#合并首尾相连多段线实战

问题解构 用户需要在C#中实现合并所有首尾相连的多段线。核心需求包括&#xff1a; 识别连接性&#xff1a;判断多段线是否首尾相连&#xff08;端点重合&#xff09;合并算法&#xff1a;将相连的多段线合并为单一多段线CAD环境&#xff1a;通常在AutoCAD等CAD二次开发环境中…

作者头像 李华
网站建设 2026/4/21 3:01:22

基于TMS320F28035的汇川变频器源码:MD290、MD380、MD500三种型号及新的...

变频器汇川的三种变频器源码&#xff0c;包括MD290,MD380,MD500变频器源码,基于TMS320F28035 新的SVC3算法&#xff0c;高速速度波动小&#xff0c;新的转子电阻&#xff0c;漏感辩识算法.系统概述 本文基于汇川技术股份有限公司开发的MD290、MD380、MD500系列变频器的嵌入式软…

作者头像 李华
网站建设 2026/4/21 3:00:25

旷世之作,云南第一书画史诗《白族创世纪》诞生,中国艺术的经典

由艺术大师范笑歌创作的云南第一书画史诗《白族创世纪》终于完成&#xff0c;作为云南艺术史册上的顶尖之作&#xff0c;从诗歌的编写到书法、绘画的精工&#xff0c;都是范先生独自完成。为何称此作品为云南第一书画史诗&#xff0c;主要因为这是书法与绘画的完美合璧&#xf…

作者头像 李华