一.什么是遍历?

jQuery 遍历,意为“查找”,用于根据其相对于其他元素的关系来“查找”(或选取)HTML 元素。
以某项选择开始,并沿着这个选择移动,直到抵达您期望的元素为止。
下图展示了一个家族树。通过 jQuery 遍历,您能够从被选(当前的)元素开始,轻松地在家
族树中向上移动(祖先),向下移动(子孙),水平移动(同胞)。这种移动被称为对 DOM 进行遍
历。

图示解释:

jquery 循环找同类元素 jq遍历元素_前端

<div> 元素是 <ul> 的父元素,同时是其中所有内容的祖先。
<ul> 元素是 <li> 元素的父元素,同时是 <div> 的子元素
左边的 <li> 元素是 <span> 的父元素,<ul> 的子元素,同时是 <div>的后代
<span>元素是 <li> 的子元素,同时是 <ul> 和 <div> 的后代。
两个 <li> 元素是同胞(拥有相同的父元素)
右边的 <li> 元素是 <b> 的父元素,<ul> 的子元素,同时是 <div> 的后代。
<b> 元素是右边的 <li>的子元素,同时是 <ul> 和 <div> 的后代

** 提示:祖先是父、祖父、曾祖父等等。后代是子、孙、曾孙等等。同胞拥有相同的父。**

二.遍历的方法

2-1 向上遍历 DOM 树

parent() :返回被选元素的直接父元素。
body代码

<body class="ancestors">body(曾曾祖父节点)
		<div style="width: 500px;">div(曾祖父节点)
			<ul>ul(祖父节点)
				<li>li(直接父节点)
					<span>span</span>
				</li>
			</ul>
		</div>
	</body>

css代码

<style>
			body *:not(script){display: block; border:2px solid lightgrey; color:#ccc;
			padding: 5px; margin: 15px;}
		script{display: none;border: none;} 
		</style>

js代码

<script>
			$(document).ready(function(){
				$("span").parent().css({"color":"red","border":"2px solid red"});
			});
		</script>

**parents():返回被选元素的所有祖先元素,它一路向上直到文档的根元素 ()。
body代码和css代码和上面一样
js代码

<script>
			$(document).ready(function(){
				$("span").parents().css({//所有的祖先元素
				// $("span").parents("div").css({//可以指定祖先元素
					"color":"red","border":"2px solid red",
				});
			});
		</script>

parentsUntil():返回介于两个给定元素之间的所有祖先元素
body代码和css代码和上面一样
js代码

<script>
			$(document).ready(function(){
				$("span").parentsUntil("body").css({//向上查找遇见某个元素祖先元素为止
					"color": "red",
					"border": "2px solid red"
				});
			});
		</script>

2-2 向下遍历 DOM 树

children() : 返回被选元素的所有直接子元素。、
body代码

<body>body(曾曾祖父节点)
		<div style="width: 500px;">div(曾祖父节点)
			<ul>ul(祖父节点)
				<li>li(直接父节点)
					<span>span1</span>
				</li>
				<li>li(直接父节点)
					<span>span2</span>
				</li>
			</ul>
		</div>
	</body>

css代码和上面一样
js代码

<script>
			$(document).ready(function() {
				//查找子元素(按照从属关系来)
				$("ul").children("li:first-child").children("span").css({
				//find==》 按照指定的条件向下查找
				// $("ul").find("span:contains(1)").css({
				 // $("ul").find("li:eq(0) span").css({
					"color": "red",
					"border": "2px solid red"
				});
			});
		</script>

find():返回被选元素的所有的后代元素,一路向下直到最后一个后
代。

body代码和css代码和上面一样
js代码

<script>
			$(document).ready(function() {
				$("ul").find("span").css({
					"color": "red",
					"border": "2px solid red"
				});
			});
		</script>

2-3 水平遍历 DOM 树

2-3-1向后遍历

siblings ():返回被选元素的所有同胞元素。
body代码

<body class="ancestors">body (曾曾祖父节点)
		<div style="width:500px;" class="siblings">
			<ul>ul (父节点)
				<li>li (类名为"star"的上一个兄弟节点)</li>
				<li>li (类名为"star"的上一个兄弟节点)</li>
				<li class="start">li (兄弟节点)</li>
				<li>li (类名为"star"的下一个兄弟节点)</li>
				<li>li (类名为"star"的下一个兄弟节点)</li>
			</ul>
		</div>
		<p>在这个例子中,我们选择类名称为“star”的li元素的所有兄弟元素。</p>
	</body>

css代码

body * {
				display: block;
				border: 2px solid lightgrey;
				color: #ccc;
				padding: 5px;
				margin: 15px;
			}

			script {
				display: none;
				border: none;
			}

js代码

$(document).ready(function() {
				$(".start").siblings().css({
					"color": "red",
					"border": "2px solid red"
				});
			});

next ( ):返回被选元素的下一个同胞元素。
body代码和css代码和上面一样

$(document).ready(function() {
				$(".start").next().css({
					"color": "red",
					"border": "2px solid red"
				});
			});

nextAll( ): 返回被选元素的所有跟随的同胞元素。
body代码和css代码和上面一样

$(document).ready(function() {
					$("li.start").nextAll().css({
					"color": "red",
					"border": "2px solid red"
				});
			});

nextUntil( ): 返回介于两个给定参数之间的所有跟随的同胞元素。
body代码

<body class="ancestors">body (曾曾祖父节点)
		<div style="width:500px;" class="siblings">
			<ul>ul (父节点)
				<li>li (类名为"star"的上一个兄弟节点)</li>
				<li>li (类名为"star"的上一个兄弟节点)</li>
				<li class="start">li (兄弟节点)</li>
				<li>li (类名为"star"的下一个兄弟节点)</li>
				<li>li (类名为"star"的下一个兄弟节点)</li>
				<li>li (类名为"star"的下一个兄弟节点)</li>
				<li>li (类名为"star"的下一个兄弟节点)</li>
				<li>li (类名为"star"的下一个兄弟节点)</li>
			</ul>
		</div>
		<p>在这个例子中,我们选择类名称为“star”的li元素的所有兄弟元素。</p>
	</body>

css代码和上面一样
js代码

$(document).ready(function() {
					$("li.start").nextUntil("li:last-child").css({
					// $("li.start~li").not("li:last-child").css({
					// $("ul").children("li:eq(3),li:eq(4),li:eq(5),li:eq(6)").css({
					// $("li:eq(7)").prevAll().not("li:gt(3)").css({
					"color": "red",
					"border": "2px solid red"
				});
			});

2-3-2向前遍历

prev( ) : 返回被选元素的上一个同胞元素
prevAll( ) : 返回被选元素前面所有的同胞元素。
prevUntil( ):返回被选元素之前介于两个给定参数之间所有的同胞元素。
body代码

<body class="ancestors">body (曾曾祖父节点)
		<div style="width:500px;" class="siblings">
			<ul>ul (父节点)  
				<li class="first">li (类名为"star"的上一个兄弟节点)</li>
				<li>li (类名为"star"的上一个兄弟节点)</li>
				<li>li (类名为"star"的上一个兄弟节点)</li>
				<li>li (类名为"star"的上一个兄弟节点)</li>
				<li class="start">li (兄弟节点)</li>
				<li>li (类名为"star"的下一个兄弟节点)</li>
				<li>li (类名为"star"的下一个兄弟节点)</li>
				<li>li (类名为"star"的下一个兄弟节点)</li>
			</ul>   
		</div>
		<p>在这个例子中,我们选择类名称为“star”的li元素的所有兄弟元素。</p>
	</body>

css代码

js代码

<script>
			$(document).ready(function() {
				//上一个兄弟元素
				// $(".start").prev().css("color","red")
				//上面所有的兄弟元素
				// $(".start").prevAll().css("color","red")
				//查找上面所有的兄弟元素,直到遇见某个元素为止
				//$(".start").prevUntil("li:first").css("color","red")
				$(".start").prevAll("[class!=first]").css("color","red")
				
			});
		</script>

2-4 过滤

备注:此过滤为对象的方法,不同于选择器

通用语法:
jquery 循环找同类元素 jq遍历元素_jquery 循环找同类元素_02(selector).last()、$(selector).eq()、
jquery 循环找同类元素 jq遍历元素_前端_03(selector).not()、$(selector).is()
first ():返回被选元素的首个元素。
last ():返回被选元素的最后一个元素。
eq( ): 返回被选元素中带有指定索引号的元素。

<style>
			body * {
				display: block;
				border: 2px solid lightgrey;
				color: #ccc;
				padding: 5px;
				margin: 15px;
			}
			script {
				display: none;
				border: none;
			}
		</style>
		<script>
			$(function(){
				$("li").first().css("color","red")
				$("li").last().css("color","green")
				$("li").not(":eq(2)").css("font-size","26px")
				$("li").eq(3).css("background","red")
			})
		</script>
	<body>
		<body class="ancestors">body (曾曾祖父节点)
			<div style="width:500px;" class="siblings">
				<ul>ul (父节点)
					<li>li (类名为"star"的上一个兄弟节点)</li>
					<li>li (类名为"star"的上一个兄弟节点)</li>
					<li class="start">li (兄弟节点)</li>
					<li>li (类名为"star"的下一个兄弟节点)</li>
					<li>li (类名为"star"的下一个兄弟节点)</li>
				</ul>
			</div>
			<p>段落1</p>
			<p>段落2</p>
			<p>段落3</p>
			<p>段落4</p>
			<p>段落5</p>
		</body>

filter( ):规定一个标准。不匹配这个标准的元素会被从集合中删除,匹配的元素被返回。

例如: $("li").filter(":not(:contains('暗香'))").removeClass()

not( ): 返回不匹配标准的所有元素
is( ): 根据选择器检查当前匹配元素集合,如果存在至少一个匹配元素,则返回 true。

<script>
			$(function(){
				if($("p").parent().is("div")){//用于判断
					alert("p的父元素是div")
				}
				if($("p").children().is("span")){
					alert("p的子元素是span")
				}
			})
		</script>
	<body>
		<div>
			<p>段落
				<span>段落中的span</span>
			</p>
		</div>
	</body>
$("selector").has("sub_selector").length 
用来检测某个子元素是否存在 存在为 1 否则为 0 Example:
 console.log( $("li").eq(1).has("span").length)

2-5 jQuery 中 each 遍历的三种方法 $().each()

1、普通遍历

$('div').each(function (){
 //code
});

案例:

<script src="../../js/jquery-1.9.1.min.js"></script>
		<script type="text/javascript">
			$(function() {
				var colors = ["red", "green", "cyan", "orange", "purple"]
				var sum = 0;
				$("p").css({
					"width": "100px",
					"height": "100px",
					"border": "1px solid #333",
					"float": "left",
					"margin-right": "20px",
					"line-height": "100px",
					"text-align": "center",
				}).each(function() {
					sum += parseInt($(this).text());
					$(this).css({
						"background-color": colors[Math.floor(Math.random() * 5)],
						"color": colors[Math.floor(Math.random() * 5)],
					})
				})
				console.log(sum);
			})
		</script>
	<body>
		<p>1</p>
		<p>2</p>
		<p>3</p>
		<p>4</p>
		<p>5</p>
	</body>

显示结果

jquery 循环找同类元素 jq遍历元素_javascript_04

2、选择器+遍历

$('div').each(function (i){
i 就是索引值
 this 表示获取遍历每一个 dom 对象
 //this.html(“”)
});

案例

<style type="text/css">
			* {margin: 0;padding: 0;}
			.imgcss{display: inline-block;	border: 10px solid #fff;
			box-shadow: 2px 2px 3px #ccc;margin: 0 10px 0 10px;}
		</style>
		<script src="../../js/jquery-1.9.1.min.js"></script>
		<script>
		$(function(){
			$("img").each(function(i){
				this.src="img/"+(i+1)+".jpg"
				$(this).hover(function(){
					$(this).toggleClass("imgcss")
				})
			})
		})
		</script>
	<body>
		<img />
		<img />
		<img />
	</body>

3、选择器+元素

$('div').each(function (index,domEle){
 index 就是索引值
 domEle 表示获取遍历每一个 dom 对象
});

案例:

<script>
			$(function() {
				var colors = ["red", "green", "cyan", "orange", "purple"]
				$("li").each(function(index,element) {//index索引 element——li(this)
					$(element).html("编号" + (index + 1))
					.css({
						"background-color":colors[Math.floor(Math.random()*3)],
						"width": "100px",
						"height": "100px",
						"float":"left",
						"margin-right": "10px",
						"list-style": "none",
					})
				})
			})
		</script>
	<body>
		<ul>
			<li>item</li>
			<li>item</li>
			<li>item</li>
		</ul>
	</body>

4、更适用的遍历方法[json]

(1)先获取某个集合对象
(2)遍历集合对象的每一个元素
var d=$("div");
$.each(obj,function (index,domEle){
obj 是要遍历的集合
 index 就是索引值
 domEle 表示获取遍历每一个 dom 对象
});