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 中任何一个元素,是编写复杂交互的必备技能。