jQuery隨筆記-遍歷


jQuery中的遍歷說容易也很容易,說難也很難。

說簡單是因為她的遍歷函數很簡單,也很清晰的顯示了向前,向后,同級遍歷的操作。

說難是因為過於復雜的DOM結構中很容易弄亂,比如表格嵌套表格,便利一個元素可能要向上找好幾次,在向同級找,而且往往出錯了我們也不知道他找的是哪里。

我們先來看下,jQuery中的遍歷函數表:

函數 描述
.add() 將元素添加到匹配元素的集合中。
.andSelf() 把堆棧中之前的元素集添加到當前集合中。
.children() 獲得匹配元素集合中每個元素的所有子元素。
.closest() 從元素本身開始,逐級向上級元素匹配,並返回最先匹配的祖先元素。
.contents() 獲得匹配元素集合中每個元素的子元素,包括文本和注釋節點。
.each() 對 jQuery 對象進行迭代,為每個匹配元素執行函數。
.end() 結束當前鏈中最近的一次篩選操作,並將匹配元素集合返回到前一次的狀態。
.eq() 將匹配元素集合縮減為位於指定索引的新元素。
.filter() 將匹配元素集合縮減為匹配選擇器或匹配函數返回值的新元素。
.find() 獲得當前匹配元素集合中每個元素的后代,由選擇器進行篩選。
.first() 將匹配元素集合縮減為集合中的第一個元素。
.has() 將匹配元素集合縮減為包含特定元素的后代的集合。
.is() 根據選擇器檢查當前匹配元素集合,如果存在至少一個匹配元素,則返回 true。
.last() 將匹配元素集合縮減為集合中的最后一個元素。
.map() 把當前匹配集合中的每個元素傳遞給函數,產生包含返回值的新 jQuery 對象。
.next() 獲得匹配元素集合中每個元素緊鄰的同輩元素。
.nextAll() 獲得匹配元素集合中每個元素之后的所有同輩元素,由選擇器進行篩選(可選)。
.nextUntil() 獲得每個元素之后所有的同輩元素,直到遇到匹配選擇器的元素為止。
.not() 從匹配元素集合中刪除元素。
.offsetParent() 獲得用於定位的第一個父元素。
.parent() 獲得當前匹配元素集合中每個元素的父元素,由選擇器篩選(可選)。
.parents() 獲得當前匹配元素集合中每個元素的祖先元素,由選擇器篩選(可選)。
.parentsUntil() 獲得當前匹配元素集合中每個元素的祖先元素,直到遇到匹配選擇器的元素為止。
.prev() 獲得匹配元素集合中每個元素緊鄰的前一個同輩元素,由選擇器篩選(可選)。
.prevAll() 獲得匹配元素集合中每個元素之前的所有同輩元素,由選擇器進行篩選(可選)。
.prevUntil() 獲得每個元素之前所有的同輩元素,直到遇到匹配選擇器的元素為止。
.siblings() 獲得匹配元素集合中所有元素的同輩元素,由選擇器篩選(可選)。
.slice() 將匹配元素集合縮減為指定范圍的子集。

(表格內容摘自w3school.com.cn)

在操作頁面其他元素是最常用的幾個分別是:.parent() , .children() , .prev() , .next() 。

一般來說我在需要寫一個遍歷的時候就先寫一個html測試頁面,用相同的結構來測試代碼。如下:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>jQuery遍歷測試</title>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.7.2.min.js"></script>
<script type="text/javascript">
            $(document).ready(function() {
                $(".elan").css("font-weight", "bold");
                $(".elan").bind("click", this, function() {
                    $(this).css("font-weight", "normal");
                    $(this).parent().parent().parent().parent().prev().css("font-weight", "normal");
                });
                $(".elan-top").css("font-weight", "bold");
                $(".elan-top").bind("click", this, function() {                    
                    $(this).css("color", "green");
                    $(this).parent().children("td").children("table").children("tbody").children("tr").children(".elan").css("color", "green");
                });
            });
            function tdonclick(obj) {
            $(obj).parent().parent().parent().parent().prev().css("background-color", "red");
            }
        </script>
</head>
<body>
<table>
  <tr>
    <td class="elan-top">父表(1,1)</td>
    <td><table>
        <tr>
          <td onClick="tdonclick(this);">子表(1,1)</td>
        </tr>
        <tr>
          <td class="elan">子表(1,2)</td>
        </tr>
      </table></td>
  </tr>
  <tr>
    <td class="elan-top">父表(2,1)</td>
    <td><table>
        <tr>
          <td onClick="tdonclick(this);">子表(2,1)</td>
        </tr>
        <tr>
          <td class="elan">子表(2,2)</td>
        </tr>
      </table></td>
  </tr>
</table>
</body>
</html>

上面的代碼要實現的效果就是點擊每個“子表(*,2)”元素時,自己和同行的“父表(*,1)”粗體字變為普通字體;點擊“父表(*,1)”則自己和同行的class=“elan”的子表元素變為綠色;點擊“子表(*,1)”元素時,“父表(*,1)”元素背景色變為紅色。

猛的一看初學者肯定會覺得上面所有代碼里面都多了一層遍歷,其實jQuery的遍歷是根據頁面DOM進行的,這也是我們經常會出錯的地方,比如這里,表格其實還有一個<tbody></tobody>的元素節點,所以每次遍歷到<tr></tr>的時候我們都要將這個加進去。

*這里推薦大家一種方便的查找遍歷節點的方法,IE8+,Chrome瀏覽器都提供了開發者工具,我們可以先將網頁結構編寫好,然后在這里面進行調試,打開開發者工具(F12),那里面會將頁面的DOM元素一一列出,只要細心查找,一般都能解決遍歷的問題。如下圖所示,是IE8中的開發者工具顯示的頁面結構,這里可以很容看到遍歷的節點。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM