1. 程式人生 > >jquery(四)jQuery遍歷

jquery(四)jQuery遍歷

通過 jQuery 遍歷,您能夠從被選(當前的)元素開始,輕鬆地在家族樹中向上移動(祖先),向下移動(子孫),水平移動(同胞)。這種移動被稱為對 DOM 進行遍歷。

圖示解釋:

遍歷 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");
});