jQuery 遍历方法

选择器一次选中的往往是一大组元素,遍历方法负责在 DOM 树中"上下左右"移动,或在这组元素内部继续筛选,精准锁定要操作的目标。

向上找祖先

parent / parents / parentsUntil 沿父级链向上走:

$("span").parent();             // 直接父元素
$("span").parents();            // 所有祖先,直到 <html>
$("span").parents("div");       // 祖先中所有 div
$("span").parentsUntil("body"); // 向上直到 body(不含 body)
// 效果:span 可能属于 li > ul > div > body,parents() 都能找出

向下找后代

children 只找直接子元素,find 搜索所有后代:

$("ul").children();         // 所有直接子元素
$("ul").children("li");     // 直接子元素中过滤出 li
$("ul").find("li");         // 所有后代 li,包含嵌套层级里的
$("ul").find(".hot");       // 后代中 class 为 hot 的元素

左右找同胞

同胞(siblings)是共享同一父元素的元素,不包括自己:

$("li.start").siblings();        // 所有同胞 li
$("li.start").next();            // 紧邻的下一个元素
$("li.start").nextAll("li");     // 后面所有的 li
$("li.start").nextUntil(".end"); // 直到遇见 .end 为止的后续元素
$("li.start").prev();            // 紧邻的前一个元素
$("li.start").prevAll();         // 前面所有的 li

在集合内过滤

first / last / eq 按下标取,filter / not 按条件筛:

$("li").first();             // 集合中第一个 li
$("li").last();              // 最后一个
$("li").eq(2);               // 索引为 2 的那个(第 3 个)
$("li").filter(".active");   // 只保留带 .active 的
$("li").not(".active");      // 排除带 .active 的
$("div").has("p");           // 内部含 p 的 div

判断与遍历集合

is() 判断集合是否匹配,each() 逐个处理,add() 合并集合:

if ($("li").is(".active")) { console.log("存在激活项"); } // 输出:存在激活项
$("h2").add("h3").css("color", "red"); // h2、h3 合并后一起变色
$("li").each(function (i, el) {
  console.log(i + ":" + $(el).text());
  // 输出:0:首页 / 1:新闻 / 2:关于
});

小结:向上 parent(s)、向下 children/find、左右 siblings/next/prev、再辅以 filter/eq 与 each 遍历,几乎能从任意起点到达 DOM 中任何一个元素,是编写复杂交互的必备技能。

笔记加载中…