jQuery 遍历

选择器能从整棵 DOM 树中"一把抓"出想要的元素,而**遍历(Traversing)**则是从已选中的元素出发,向上、向下或向旁边移动,去挑选与之相关的其他元素,比如"点击 li 高亮它的父级 ul"。

先看一棵典型的 DOM 树:

<div class="root">              <!-- 祖先 -->
    <ul id="nav">               <!-- 父级 -->
        <li>首页</li>           <!-- 子级 -->
        <li>教程</li>
    </ul>
</div>

什么是遍历

遍历就是沿着 DOM 的层级关系"走来走去":

  • 向上走:找父级、祖先(parent / parents)
  • 向下走:找子级、后代(children / find)
  • 水平走:找兄弟(siblings / next / prev)

每一"走"都返回一个新的 jQuery 对象,可以继续链式操作。

向上遍历

从 #nav 出发向上找父级和祖先:

$("#nav").parent();   // 效果:返回 .root
$("#nav").parents();  // 效果:返回 .root、body、html 等全部祖先

parent() 只跳一级,parents() 一路到顶。选中的 li 的祖父级这样找:

$("li").parent();   // 效果:两个 li 的父级都是 #nav
$("li").parent().parent(); // 效果:再上一层得到 .root

向下遍历

从 #nav 出发找它的直接子级(children)与所有后代(find):

$("#nav").children(); // 效果:返回两个 li(直接子级)
$("#nav").find("li"); // 效果:也返回两个 li;若 li 嵌套更深也能找到

children() 只到第一层;find() 可以穿透到任意深度的后代。

水平遍历

在同胞元素之间移动,即"兄弟之间横向找":

$("#nav li").first().next();          // 效果:首页的下一兄弟 = 教程
$("#nav li").last().prev();           // 效果:教程的上一兄弟 = 首页
$("#nav li").first().siblings();      // 效果:首页的所有兄弟 = 教程

each() 遍历集合

有时需要逐个处理匹配到的每个元素,用 each():

$("#nav li").each(function (index) {
    console.log(index + " => " + $(this).text());
});
// 输出:0 => 首页
// 输出:1 => 教程

回调中 this 是原生 DOM 元素,用 $(this) 包一层即可调用 jQuery 方法。

遍历的常见用途

  • 菜单交互:点击某项,操作它的父级 ul 或兄弟 li。
  • 表单校验:找到出错输入框所在的那一行高亮。
  • 折叠面板:从标题向上定位整个面板容器。

小结

遍历 = 沿 DOM 层级"定向移动":向上 parent/parents、向下 children/find、水平 next/prev/siblings,再用 each() 逐个处理。后面几节将分别深挖祖先、后代、同胞与过滤遍历。

笔记加载中…