通过 jQuery 遍历从被选(当前的)元素开始,在树中向上移动(祖先),向下移动(子孙),水平移动(同胞)。这种移动被称为对 DOM 进行遍历。

一、向上遍历 DOM 树
未使用jQuery之前样式,后续css与html一致
(1)元素的直接父元素:parent(),设置span父元素的背景色为黄色
| <style> |
| body{ |
| margin: 100px; |
| } |
| div{ |
| width: 200px; |
| height: 200px; |
| border: 1px solid #ccc; |
| } |
| ul{ |
| width: 100px; |
| height: 100px; |
| padding: 0; |
| margin: 50px auto; |
| border: 1px solid #ccc; |
| } |
| li{ |
| list-style: none; |
| width: 60px; |
| height: 20px; |
| margin: 20px auto; |
| background-color: red; |
| border: 1px solid #ccc; |
| } |
| </style> |
复制
| <body> |
| <div> |
| 这是div |
| <ul> |
| <li> |
| <span>span</span> |
| </li> |
| <li> |
| <a>这是a</a> |
| </li> |
| </ul> |
| </div> |
| </body> |
复制
| <script> |
| $(document).ready(function(){ |
| $("span").parent().css("background-color","yellow"); |
| }); |
| </script> |
复制

(2)元素的所有祖先元素:parents()
| <script> |
| $(document).ready(function(){ |
| $("span").parents().css("background-color","yellow"); |
| }); |
| </script> |
复制

(3)介于两个给定元素之间的所有祖先元素:parentsUntil(),介于div与span之间的祖先元素

二、向下遍历 DOM 树
(1)元素的所有直接子元素:children(),ul的子元素
| <script> |
| $(document).ready(function(){ |
| $("ul").children().css("background-color","yellow"); |
| }); |
| </script> |
复制

| <body> |
| <div> |
| 这是div |
| <ul> |
| <li class="first"> |
| <span>span</span> |
| </li> |
| <li> |
| <a>这是a</a> |
| </li> |
| </ul> |
| </div> |
| </body> |
| |
复制
| <script> |
| $(document).ready(function(){ |
| $("ul").children(".first").css("background-color","yellow"); |
| }); |
| </script> |
复制

(2)元素的后代元素,一路向下直到最后一个后代:find()
| <script> |
| $(document).ready(function(){ |
| $("div").find("a").css("background-color","yellow"); |
| }); |
| </script> |
复制

| <script> |
| $(document).ready(function(){ |
| |
| $("div").find("*").css("background-color","yellow"); |
| }); |
| </script> |
复制

三、DOM 树进行水平遍历

(1)元素的所有同胞元素:siblings()
| <style> |
| body{ |
| margin: 100px; |
| } |
| div{ |
| width: 200px; |
| height: 350px; |
| border: 1px solid #ccc; |
| } |
| ul{ |
| width: 100px; |
| height: 250px; |
| padding: 0; |
| margin: 50px auto; |
| border: 1px solid #ccc; |
| } |
| li{ |
| list-style: none; |
| width: 60px; |
| height: 20px; |
| margin: 20px auto; |
| background-color: red; |
| border: 1px solid #ccc; |
| } |
| </style> |
复制
| <body> |
| <div> |
| 这是div |
| <ul> |
| <li class="first"> |
| <span>span</span> |
| </li> |
| <li> |
| <a>这是a</a> |
| </li> |
| <li> |
| <a>1</a> |
| </li> |
| <li> |
| <a>2</a> |
| </li> |
| <li> |
| <a>3</a> |
| </li> |
| </ul> |
| </div> |
| </body> |
复制
| <script> |
| $(document).ready(function(){ |
| $("li").siblings().css("background-color","yellow"); |
| }); |
| </script> |
复制
(2)元素的下一个同胞元素:next()
| $(document).ready(function(){ |
| $(".first").next().css("background-color","yellow"); |
| }); |
| </script> |
复制

(3)元素的所有跟随的同胞元素:nextAll()
| <script> |
| $(document).ready(function(){ |
| $(".first").nextAll().css("background-color","yellow"); |
| }); |
| </script> |
复制

(4)介于两个给定参数之间的所有跟随的同胞元素:nextUntil()
| <body> |
| <div> |
| 这是div |
| <ul> |
| <li class="first"> |
| <span>span</span> |
| </li> |
| <li> |
| <a>这是a</a> |
| </li> |
| <li> |
| <a>1</a> |
| </li> |
| <li class="second"> |
| <a>2</a> |
| </li> |
| <li> |
| <a>3</a> |
| </li> |
| </ul> |
| </div> |
| </body> |
复制
| <script> |
| $(document).ready(function(){ |
| $(".first").nextUntil(".second").css("background-color","yellow"); |
| }); |
| </script> |
复制

四、过滤:缩小搜索元素的范围
(1)元素的首个元素:first()
| <script> |
| $(document).ready(function(){ |
| $("li").first().css("background-color","yellow"); |
| }); |
| </script> |
复制

(2)元素的最后一个元素:last()
| <script> |
| $(document).ready(function(){ |
| $("li").last().css("background-color","yellow"); |
| }); |
| </script> |
复制

(3)元素中带有指定索引号的元素:eq(),索引从0开始
| <script> |
| $(document).ready(function(){ |
| $("li").eq(2).css("background-color","yellow"); |
| }); |
| </script> |
复制

(4)规定一个标准,不匹配这个标准的元素会被从集合中删除,匹配的元素会被返回:filter
| <body> |
| <div> |
| 这是div |
| <ul> |
| <li class="first"> |
| <span>span</span> |
| </li> |
| <li> |
| <a>这是a</a> |
| </li> |
| <li> |
| <a>1</a> |
| </li> |
| <li class="first"> |
| <a>2</a> |
| </li> |
| <li> |
| <a>3</a> |
| </li> |
| </ul> |
| </div> |
| </body> |
复制
| <script> |
| $(document).ready(function(){ |
| $("li").filter(".first").css("background-color","yellow"); |
| }); |
| </script> |
复制

(5)返回不匹配标准的所有元素:not(),not() 方法与 filter() 相反。
| <script> |
| $(document).ready(function(){ |
| $("li").not(".first").css("background-color","yellow"); |
| }); |
| </script> |
复制
五、其他方法
(1)元素添加到已存在的元素组合中:add()
| <script> |
| $(document).ready(function(){ |
| $("ul").add("li").add("span").css("background-color","yellow"); |
| }); |
| </script> |
复制

| <script> |
| $(document).ready(function(){ |
| $("ul").add("span").css("background-color","yellow"); |
| }); |
| </script> |
复制

(2)元素的第一个祖先元素:closest()
| <script> |
| $(document).ready(function(){ |
| $("span").closest("ul").css("background-color","yellow"); |
| }); |
| </script> |
复制

(3)选取基于索引的元素的子集:slice()
| <script> |
| $(document).ready(function(){ |
| $("li").slice(3).css("background-color","yellow"); |
| }); |
| </script> |
复制
