通过 jQuery 遍历,您能够从被选(当前的)元素开始,轻松地在家族树中向上移动(祖先),向下移动(子孙),水平移动(同胞)。这种移动被称为对 DOM 进行遍历。
图示解释:
- <div> 元素是 <ul> 的父元素,同时是其中所有内容的祖先。
- <ul> 元素是 <li> 元素的父元素,同时是 <div> 的子元素
- 左边的 <li> 元素是 <span> 的父元素,<ul> 的子元素,同时是 <div> 的后代。
- <span> 元素是 <li> 的子元素,同时是 <ul> 和 <div> 的后代。
- 两个 <li> 元素是同胞(拥有相同的父元素)。
- 右边的 <li> 元素是 <b> 的父元素,<ul> 的子元素,同时是 <div> 的后代。
- <b> 元素是右边的 <li> 的子元素,同时是 <ul> 和 <div> 的后代。
提示:祖先是父、祖父、曾祖父等等。后代是子、孙、曾孙等等。同胞拥有相同的父。
向上遍历 DOM 树
- parent() 方法返回被选元素的直接父元素。
- parents() 方法返回被选元素的所有祖先元素,它一路向上直到文档的根元素 (<html>)。
- parentsUntil() 方法返回介于两个给定元素之间的所有祖先元素。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style type="text/css" >
.border{
border:1px black solid;
}
.div1{
width: 300px;
height: 300px;
}
.div2{
width:250px;
height:250px;
margin:10px;
}
.p{
width:200px;
height:200px;
margin:10px;
}
.span{
width:50px;
height:50px;
margin:20px;
}
.red{
border:2px red solid;
}
</style>
<script src="../jquery/jquery.js"></script>
<script>
$(function(){
$("button").click(function(){
var p1 = $("#span1").parent();
p1.addClass("red")
})
})
</script>
</head>
<body>
<div id="div1" class="div1 border">
div1
<div id="div2" class="div2 border">
div2
<p class="p border">
段落1
<span id="span1" class="span border">span1</span>
</p>
</div>
</div>
<button>点击</button>
</body>
</html>
将 var p1 = $("#span1").parent();替换成var p1 = $("#span1").parents();
将var p1 = $("#span1").parents();替换为var p1 = $("#span1").parents("div"); 选取html到span间所有div元素
将var p1 = $("#span1").parents("div"); 替换成var p1 = $("#span1").parentsUntil("#div1");
选取div1到span中间的所有元素
向下遍历 DOM 树
- children() 方法返回被选元素的所有直接子元素
- find() 方法返回被选元素的后代元素,一路向下直到最后一个后代
将上诉例子中 var p1 = $("#span1").parentsUntil("#div1"); 替换成 var p1 = $("#div1").children();查找div1下一级子元素
将上诉例子中 var p1 = $("#div1").children(); 替换成 var p1 = $("#div1").find("*"); 查找所有div1下的子元素
将上诉例子中 var p1 = $("#div1").find("*"); 替换成 var p1 = $("#div1").find("p"); 查找所有div1下的指定子元素P
在 DOM 树中水平遍历
- siblings() 方法返回被选元素的所有同胞元素。
- next() 方法返回被选元素的下一个同胞元素。
- nextAll() 方法返回被选元素的所有跟随的同胞元素。
- nextUntil() 方法返回介于两个给定参数之间的所有跟随的同胞元素。
- prev()
- prevAll()
- prevUntil()
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style type="text/css">
.border{
width: 300px;
height: 20px;
margin-top: 10px;
border:1px black solid;
}
.red{
border:2px red solid;
}
</style>
<script src="../jquery/jquery.js"></script>
<script>
$(function(){
$("li").addClass("border");
$("button").click(function(){
var li = $("#li3").siblings();
li.addClass("red");
})
})
</script>
</head>
<body>
<div>
<div>
<button>点击</button>
</div>
<ul>
<li>一</li>
<li>二</li>
<li>三</li>
<li>四
<ul>
<li>1</li>
<li>2</li>
<li id="li3">3</li>
</ul>
</li>
</ul>
</div>
</body>
</html>
将 var li = $("#li3").siblings(); 替换为 var li = $("#li1").next();
将 var li = $("#li1").next(); 替换为 var li = $("#li1").nextAll();
jQuery 遍历 - 过滤
三个最基本的过滤方法是:first(), last() 和 eq(),它们允许您基于其在一组元素中的位置来选择一个特定的元素。
其他过滤方法,比如 filter() 和 not() 允许您选取匹配或不匹配某项指定标准的元素。
下面的例子返回带有类名 "intro" 的所有 <p> 元素:
$(document).ready(function(){
$("p").filter(".intro");
});
下面的例子返回不带有类名 "intro" 的所有 <p> 元素:
$(document).ready(function(){
$("p").not(".intro");
});