jQuery DOM遍历是jQuery核心操作的重要组成部分,指通过jQuery选择器定位到指定元素后,沿着DOM树结构查找、访问相关元素的过程。jQuery DOM遍历提供了一系列便捷方法,可快速实现祖先、后代、兄弟元素的查找与过滤,大幅简化原生JavaScript DOM遍历的繁琐代码,是前端开发中操作DOM元素的核心手段。
祖先遍历
祖先遍历是jQuery DOM遍历中定位元素上级节点的操作,核心方法包括parent()、parents()、closest(),三种方法定位范围与返回结果存在差异,可根据实际需求选择使用,共同构成jQuery DOM遍历中祖先元素查找的完整体系。
parent()方法
parent()方法用于获取匹配元素的直接父元素,即DOM树中紧邻匹配元素的上一级元素,每次调用仅返回一个直接父元素,不包含祖父级及以上元素,是jQuery DOM遍历中最基础的祖先查找方法。
语法
$(selector).parent();示例
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>jQuery parent()方法示例</title>
<script src="jquery.min.js"></script>
<style>
.parent-box { border: 2px solid #000; padding: 10px; margin: 10px 0; }
.child-box { border: 1px solid #f00; padding: 5px; }
</style>
</head>
<body>
<div class="parent-box">
直接父元素
<div class="child-box" id="target">目标元素</div>
</div>
<script>
// 获取目标元素的直接父元素
var parentElem = $("#target").parent();
// 为父元素添加样式,便于识别
parentElem.css("background-color", "#eee");
</script>
</body>
</html>parents()方法
parents()方法用于获取匹配元素的所有祖先元素,包含直接父元素、祖父元素、曾祖父元素直至根元素(html元素),返回一个包含所有祖先元素的jQuery对象,可通过选择器筛选指定类型的祖先元素,是jQuery DOM遍历中范围最广的祖先查找方法。
语法
// 获取所有祖先元素
$(selector).parents();
// 筛选指定选择器的祖先元素
$(selector).parents(selector);示例
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>jQuery parents()方法示例</title>
<script src="jquery.min.js"></script>
<style>
html { padding: 10px; }
body { padding: 10px; border: 1px solid #333; }
.grandparent { padding: 10px; border: 1px solid #666; }
.parent { padding: 10px; border: 1px solid #999; }
.child { padding: 5px; border: 1px solid #f00; }
</style>
</head>
<body>
<div class="grandparent">
祖父元素
<div class="parent">
父元素
<div class="child" id="target">目标元素</div>
</div>
</div>
<script>
// 获取目标元素的所有祖先元素
var allParents = $("#target").parents();
// 为所有祖先元素添加统一样式
allParents.css("background-color", "#f5f5f5");
// 筛选指定类名的祖先元素
var grandparent = $("#target").parents(".grandparent");
grandparent.css("border-color", "#f00");
</script>
</body>
</html>closest()方法
closest()方法用于获取匹配元素最近的祖先元素(包含自身),即从匹配元素本身开始向上查找,找到第一个符合指定选择器的元素后停止,返回单个元素,兼具parent()方法的精准性与parents()方法的筛选性,是jQuery DOM遍历中实用性极强的祖先查找方法。
语法
$(selector).closest(selector);示例
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>jQuery closest()方法示例</title>
<script src="jquery.min.js"></script>
<style>
.container { padding: 10px; margin: 10px 0; }
.box { padding: 10px; border: 1px solid #000; }
.active { background-color: #ffe485; }
</style>
</head>
<body>
<div class="container">
<div class="box">
<div class="box" id="target">目标元素</div>
</div>
</div>
<script>
// 查找目标元素最近的.box类元素(包含自身)
var closestBox = $("#target").closest(".box");
closestBox.addClass("active");
// 查找目标元素最近的.container类元素
var closestContainer = $("#target").closest(".container");
closestContainer.css("border", "2px solid #f00");
</script>
</body>
</html>后代遍历
后代遍历是jQuery DOM遍历中定位元素下级节点的操作,核心方法包括children()与find(),两种方法分别适用于直接子元素与所有后代元素的查找,是jQuery DOM遍历中获取下级元素的核心手段。
children()方法
children()方法用于获取匹配元素的所有直接子元素,即DOM树中紧邻匹配元素的下一级元素,不包含孙子级及以下元素,与parent()方法相对应,是jQuery DOM遍历中精准获取直接子元素的方法。
语法
// 获取所有直接子元素
$(selector).children();
// 筛选指定选择器的直接子元素
$(selector).children(selector);示例
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>jQuery children()方法示例</title>
<script src="jquery.min.js"></script>
<style>
.parent { padding: 10px; border: 2px solid #000; }
.child { padding: 5px; margin: 5px 0; border: 1px solid #f00; }
.grandchild { padding: 3px; border: 1px solid #0f0; }
</style>
</head>
<body>
<div class="parent" id="target">
父元素
<div class="child">直接子元素1</div>
<div class="child">直接子元素2
<div class="grandchild">孙子元素</div>
</div>
</div>
<script>
// 获取所有直接子元素
var childrenElem = $("#target").children();
childrenElem.css("background-color", "#eee");
// 筛选指定类名的直接子元素
var childElem = $("#target").children(".child");
childElem.css("border-color", "#00f");
</script>
</body>
</html>find()方法
find()方法用于获取匹配元素的所有后代元素,包含直接子元素、孙子元素、曾孙子元素直至最底层子元素,需传入指定选择器筛选目标元素,不传入选择器时无返回结果,与parents()方法相对应,是jQuery DOM遍历中范围最广的后代查找方法。
语法
$(selector).find(selector);示例
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>jQuery find()方法示例</title>
<script src="jquery.min.js"></script>
<style>
.parent { padding: 10px; border: 2px solid #000; }
.child { padding: 5px; margin: 5px 0; border: 1px solid #f00; }
.grandchild { padding: 3px; border: 1px solid #0f0; margin: 3px 0; }
</style>
</head>
<body>
<div class="parent" id="target">
父元素
<div class="child">直接子元素1
<div class="grandchild">孙子元素1</div>
</div>
<div class="child">直接子元素2
<div class="grandchild">孙子元素2</div>
<div class="grandchild">孙子元素3</div>
</div>
</div>
<script>
// 获取所有后代中的.grandchild类元素
var grandchildElem = $("#target").find(".grandchild");
grandchildElem.css("background-color", "#ffe485");
</script>
</body>
</html>兄弟遍历
兄弟遍历是jQuery DOM遍历中定位元素同级节点的操作,核心方法包括siblings()、next()/prev()、nextAll()/prevAll(),可分别实现所有兄弟、相邻兄弟、所有后续/前置兄弟元素的查找,满足不同场景下的同级元素操作需求,是jQuery DOM遍历的重要组成部分。
siblings()方法
siblings()方法用于获取匹配元素的所有同级兄弟元素,不包含元素自身,可通过选择器筛选指定类型的兄弟元素,是jQuery DOM遍历中获取所有同级元素的便捷方法。
语法
// 获取所有兄弟元素
$(selector).siblings();
// 筛选指定选择器的兄弟元素
$(selector).siblings(selector);示例
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>jQuery siblings()方法示例</title>
<script src="jquery.min.js"></script>
<style>
.box { padding: 10px; margin: 5px 0; border: 1px solid #000; }
.active { background-color: #ffe485; }
</style>
</head>
<body>
<div class="box">兄弟元素1</div>
<div class="box" id="target">目标元素</div>
<div class="box">兄弟元素2</div>
<div class="box special">特殊兄弟元素</div>
<script>
// 获取目标元素的所有兄弟元素
var allSiblings = $("#target").siblings();
allSiblings.addClass("active");
// 筛选指定类名的兄弟元素
var specialSibling = $("#target").siblings(".special");
specialSibling.css("border-color", "#f00");
</script>
</body>
</html>next()与prev()方法
next()方法用于获取匹配元素的下一个相邻兄弟元素,prev()方法用于获取匹配元素的上一个相邻兄弟元素,两种方法均仅返回一个相邻兄弟元素,若不存在对应相邻元素则返回空jQuery对象,是jQuery DOM遍历中获取相邻同级元素的核心方法。
语法
// 获取下一个相邻兄弟元素
$(selector).next();
// 获取上一个相邻兄弟元素
$(selector).prev();示例
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>jQuery next()与prev()方法示例</title>
<script src="jquery.min.js"></script>
<style>
.box { padding: 10px; margin: 5px 0; border: 1px solid #000; }
.next-box { background-color: #e6f7ff; }
.prev-box { background-color: #fff2e6; }
</style>
</head>
<body>
<div class="box">上一个兄弟元素</div>
<div class="box" id="target">目标元素</div>
<div class="box">下一个兄弟元素</div>
<script>
// 获取下一个相邻兄弟元素
var nextElem = $("#target").next();
nextElem.addClass("next-box");
// 获取上一个相邻兄弟元素
var prevElem = $("#target").prev();
prevElem.addClass("prev-box");
</script>
</body>
</html>nextAll()与prevAll()方法
nextAll()方法用于获取匹配元素后面所有的同级兄弟元素,prevAll()方法用于获取匹配元素前面所有的同级兄弟元素,两种方法均返回包含所有对应兄弟元素的jQuery对象,可通过选择器筛选指定类型的元素,是jQuery DOM遍历中获取批量同级元素的方法。
语法
// 获取后面所有同级兄弟元素
$(selector).nextAll();
// 获取前面所有同级兄弟元素
$(selector).prevAll();
// 筛选指定选择器的兄弟元素
$(selector).nextAll(selector);
$(selector).prevAll(selector);示例
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>jQuery nextAll()与prevAll()方法示例</title>
<script src="jquery.min.js"></script>
<style>
.box { padding: 10px; margin: 5px 0; border: 1px solid #000; }
.next-all { background-color: #e6f7ff; }
.prev-all { background-color: #fff2e6; }
</style>
</head>
<body>
<div class="box">前面兄弟1</div>
<div class="box">前面兄弟2</div>
<div class="box" id="target">目标元素</div>
<div class="box">后面兄弟1</div>
<div class="box">后面兄弟2</div>
<script>
// 获取前面所有同级兄弟元素
var prevAllElem = $("#target").prevAll();
prevAllElem.addClass("prev-all");
// 获取后面所有同级兄弟元素
var nextAllElem = $("#target").nextAll();
nextAllElem.addClass("next-all");
</script>
</body>
</html>过滤遍历
过滤遍历是jQuery DOM遍历中对已获取的元素集合进行筛选的操作,核心方法包括first()、last()、eq()、filter()、not(),可根据索引、条件等筛选出目标元素,进一步精准定位DOM节点,完善jQuery DOM遍历的功能闭环。
first()与last()方法
first()方法用于获取元素集合中的第一个元素,last()方法用于获取元素集合中的最后一个元素,两种方法均返回单个元素,无需传入参数,是jQuery DOM遍历中最简单的索引筛选方法。
语法
// 获取元素集合中的第一个元素
$(selector).first();
// 获取元素集合中的最后一个元素
$(selector).last();示例
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>jQuery first()与last()方法示例</title>
<script src="jquery.min.js"></script>
<style>
.box { padding: 10px; margin: 5px 0; border: 1px solid #000; }
.first-box { background-color: #e6f7ff; }
.last-box { background-color: #fff2e6; }
</style>
</head>
<body>
<div class="box">元素1</div>
<div class="box">元素2</div>
<div class="box">元素3</div>
<div class="box">元素4</div>
<script>
// 获取第一个元素
var firstElem = $(".box").first();
firstElem.addClass("first-box");
// 获取最后一个元素
var lastElem = $(".box").last();
lastElem.addClass("last-box");
</script>
</body>
</html>eq()方法
eq()方法用于获取元素集合中指定索引位置的元素,索引从0开始计数,传入正整数表示从前往后计数,传入负整数表示从后往前计数,返回单个元素,是jQuery DOM遍历中精准索引筛选的核心方法。
语法
$(selector).eq(index);示例
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>jQuery eq()方法示例</title>
<script src="jquery.min.js"></script>
<style>
.box { padding: 10px; margin: 5px 0; border: 1px solid #000; }
.target-box { background-color: #ffe485; border-color: #f00; }
</style>
</head>
<body>
<div class="box">元素1(索引0)</div>
<div class="box">元素2(索引1)</div>
<div class="box">元素3(索引2)</div>
<div class="box">元素4(索引3)</div>
<script>
// 获取索引为1的元素(第二个元素)
var eqElem1 = $(".box").eq(1);
eqElem1.addClass("target-box");
// 获取索引为-1的元素(最后一个元素)
var eqElem2 = $(".box").eq(-1);
eqElem2.css("font-weight", "bold");
</script>
</body>
</html>filter()与not()方法
filter()方法用于筛选出符合指定条件的元素,保留元素集合中满足条件的元素;not()方法与filter()方法相反,用于筛选出不符合指定条件的元素,排除元素集合中满足条件的元素,两种方法均可传入选择器或函数作为筛选条件,是jQuery DOM遍历中灵活的条件筛选方法。
语法
// 筛选符合选择器的元素
$(selector).filter(selector);
// 筛选符合函数条件的元素
$(selector).filter(function(index) {
// 筛选逻辑,返回true保留元素,false排除元素
});
// 排除符合选择器的元素
$(selector).not(selector);
// 排除符合函数条件的元素
$(selector).not(function(index) {
// 筛选逻辑,返回true排除元素,false保留元素
});示例
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>jQuery filter()与not()方法示例</title>
<script src="jquery.min.js"></script>
<style>
.box { padding: 10px; margin: 5px 0; border: 1px solid #000; }
.filter-box { background-color: #e6f7ff; }
.not-box { background-color: #fff2e6; }
</style>
</head>
<body>
<div class="box">元素1</div>
<div class="box special">元素2(特殊)</div>
<div class="box">元素3</div>
<div class="box special">元素4(特殊)</div>
<script>
// 筛选出.special类的元素
var filterElem = $(".box").filter(".special");
filterElem.addClass("filter-box");
// 排除.special类的元素
var notElem = $(".box").not(".special");
notElem.addClass("not-box");
// 用函数筛选索引为偶数的元素
var filterFunc = $(".box").filter(function(index) {
return index % 2 === 0;
});
filterFunc.css("font-weight", "bold");
</script>
</body>
</html>jQuery版本中DOM遍历方法的变化
以下表格汇总了jQuery DOM遍历核心方法在不同jQuery版本中的核心变化,便于开发者根据项目所使用的jQuery版本调整代码,确保jQuery DOM遍历操作的兼容性与稳定性。
| 方法名称 | 版本变化说明 |
|---|---|
| parent()/parents() | jQuery 1.0 版本引入,支持基础的祖先元素查找;jQuery 1.2 版本新增支持传入选择器筛选祖先元素;jQuery 1.9 版本修复了parents()方法筛选根元素时的兼容性问题,优化了jQuery DOM遍历的稳定性。 |
| closest() | jQuery 1.3 版本新增,初始支持选择器筛选;jQuery 1.4 版本优化了查找效率,新增支持自身元素匹配;jQuery 1.9 版本修复了查找隐藏元素时的bug,成为jQuery DOM遍历中最常用的祖先查找方法之一。 |
| children()/find() | jQuery 1.0 版本引入children()方法,jQuery 1.1 版本引入find()方法;jQuery 1.2 版本为两种方法新增选择器筛选功能;jQuery 1.7 版本优化了find()方法的性能,提升了大规模DOM树中jQuery DOM遍历的效率。 |
| siblings()/next()/prev() | jQuery 1.0 版本引入三种方法,初始仅支持基础的兄弟元素查找;jQuery 1.2 版本新增选择器筛选功能;jQuery 1.4 版本优化了siblings()方法的性能,避免冗余元素的获取,完善jQuery DOM遍历的同级查找能力。 |
| nextAll()/prevAll() | jQuery 1.2 版本新增,支持获取所有后续/前置兄弟元素;jQuery 1.4 版本新增选择器筛选功能;jQuery 1.6 版本优化了索引计算逻辑,修复了负索引查找时的偏差问题,提升jQuery DOM遍历的精准度。 |
| first()/last()/eq() | jQuery 1.1 版本引入三种方法;jQuery 1.4 版本为eq()方法新增负索引支持,可从后往前计数;jQuery 1.9 版本优化了三种方法的返回值处理,确保始终返回jQuery对象,兼容后续链式调用,适配jQuery DOM遍历的连贯操作。 |
| filter()/not() | jQuery 1.0 版本引入两种方法,初始支持选择器筛选;jQuery 1.4 版本新增支持函数作为筛选条件,增强筛选灵活性;jQuery 1.9 版本修复了函数筛选时索引计算的bug,优化了jQuery DOM遍历的条件筛选逻辑。 |
jQuery DOM遍历通过祖先、后代、兄弟、过滤四大类方法,构建了完整的DOM元素查找体系,这些方法简洁高效、兼容性强,可根据实际需求灵活组合使用,熟练掌握jQuery DOM遍历的核心方法,能有效提升DOM元素操作的效率与精准度,是jQuery开发的核心技能之一。
