改變獲取物件方式 萬能的jQuery選擇器
編寫任何javascript程式我們要首先獲得物件,jQuery選擇器可以獲取幾乎任何語意的物件,比如"擁有title屬性並且值中包含test的元素",完成這些工作只需要編寫一個jQuery選擇器字串,學習jQuery選擇器是學習jQuery最重要的一步。
Dom物件和jQuery包裝集
無論是在寫程式還是看API文件, 我們要時刻注意區分Dom物件和jQuery包裝集。
1.Dom物件
在傳統的javascript開發中,我們都是首先獲取Dom物件,比如:
- var div = document.getElementById("testDiv");
- var divs = document
我們經常使用document.getElementById方法根據id獲取單個Dom物件, 或者使用document.getElementsByTagName方法根據HTML標籤名稱獲取Dom物件集合。
另外在事件函式中, 可以通過在方法函式中使用this引用事件觸發物件(但是在多播事件函式中IE6存在問題), 或者使用event物件的target(FF)或srcElement(iIE6)獲取到引發事件的Dom物件
注意我們這裡獲取到的都是Dom物件, Dom物件也有不同的型別比如input, div, span等. Dom物件只有有限的屬性和方法:
2.jQuery包裝集
jQuery包裝集可以說是Dom物件的擴充.在jQuery的世界中將所有的物件, 無論是一個還是一組, 都封裝成一個jQuery包裝集,比如獲取包含一個元素的jQuery包裝集:
- var jQueryObject = $("#testDiv");
jQuery包裝集都是作為一個物件一起呼叫的. jQuery包裝集擁有豐富的屬性和方法, 這些都是jQuery特有的:
3.Dom物件與jQuery物件的轉換
(1) Dom轉jQuery包裝集
如果要使用jQuery提供的函式, 就要首先構造jQuery包裝集. 我們可以使用本文即將介紹的jQuery選擇器直接構造jQuery包裝集,比如:
- $("#testDiv");
上面語句構造的包裝集只含有一個id是testDiv的元素,或者我們已經獲取了一個Dom元素,比如:
- var div = document.getElementById("testDiv");
上面的程式碼中div是一個Dom元素, 我們可以將Dom元素轉換成jQuery包裝集:
- var domToJQueryObject = $(div);
小竅門:因為有了智慧感知, 所以我們可以通過智慧感知的方法列表來判斷一個物件啊是Dom物件還是jQuery包裝集.
(2) jQuery包裝集轉Dom物件
jQuery包裝集是一個集合, 所以我們可以通過索引器訪問其中的某一個元素:
- var domObject = $("#testDiv")[0];
注意, 通過索引器返回的不再是jQuery包裝集, 而是一個Dom物件!jQuery包裝集的某些遍歷方法,比如each()中, 可以傳遞遍歷函式, 在遍歷函式中的this也是Dom元素,比如:
- $("#testDiv").each(function() { alert(this) })
如果我們要使用jQuery的方法操作Dom物件,怎麼辦? 用上面介紹過的轉換方法即可:
- $("#testDiv").each(function() { $(this).html("修改內容") })
小結: 先讓大家明確Dom物件和jQuery包裝集的概念, 將極大的加快我們的學習速度. 我在學習jQuery的過程中就花了很長時間沒有領悟到兩者的具體差異, 因為書上並沒有專門講解兩者的區別, 所以經常被"this指標為何不能呼叫jQuery方法"等問題迷惑. 直到某一天豁然開朗, 發現只要能夠區分這兩者, 就能夠在寫程式時變得清清楚楚。
--------------------------------------------------------------------------------------------------
什麼是jQuery選擇器
在Dom程式設計中我們只能使用有限的函式根據id或者TagName獲取Dom物件,在jQuery中則完全不同,jQuery提供了異常強大的選擇器用來幫助我們獲取頁面上的物件, 並且將物件以jQuery包裝集的形式返回,首先來看看什麼是選擇器:
- //根據ID獲取jQuery包裝集
- ar jQueryObject = $("#testDiv");
上例中使用了ID選擇器, 選取id為testDiv的Dom物件並將它放入jQuery包裝集, 最後以jQuery包裝集的形式返回。"$"符號在jQuery中代表對jQuery物件的引用, "jQuery"是核心物件, 其中包含下列方法:
- jQuery( expression, context )
- Returns: jQuery
這個函式接收一個CSS選擇器的字串,然後用這個字串去匹配一組元素。
- jQuery( html, ownerDocument )
- Returns: jQuery
根據HTML原始字串動態建立Dom元素.
- jQuery( elements )
- Returns: jQuery
將一個或多個Dom物件封裝jQuery函式功能(即封裝為jQuery包裝集)
- jQuery( callback )
- Returns: jQuery
Returns的型別為jQuery即表示返回的是jQuery包裝集.其中第一個方法有些問題, 官方介面寫的是CSS選擇器, 但是實際上這個方法不僅僅支援CSS選擇器, 而是所有jQuery支援的選擇器, 有些甚至是jQuery自定義的選擇器(在CSS標準中不存在的選擇器),為了能讓大家理解的更清楚,我們將方法修改如下:
- jQuery( selector, context )
- Returns: jQuery
根據選擇器選取匹配的物件, 以jQuery包裝集的形式返回。context可以是Dom物件集合或jQuery包裝集,傳入則表示要從context中選擇匹配的物件,不傳入則表示範圍為文件物件(即頁面全部物件)。上面這個方法就是我們選擇器使用的核心方法.可以用"$"代替jQuery讓語法更簡介, 比如下面兩句話的效果相同:
- //根據ID獲取jQuery包裝集
- var jQueryObject = $("#testDiv");
- //$是jQuery物件的引用:
- var jQueryjQueryObject = jQuery("#testDiv");
接下來讓我們系統的學習jQuery選擇器。
----------------------------------------------------------------------------
jQuery選擇器全解
通俗的講, Selector選擇器就是"一個表示特殊語意的字串",只要把選擇器字串傳入上面的方法中就能夠選擇不同的Dom物件並且以jQuery包裝集的形式返回。
但是如何將jQuery選擇器分類讓我犯難. 因為書上的分類和jQuery官方的分類截然不同. 最後我決定以實用為主, 暫時不去了解CSS 3選擇器標準, 而按照jQuery官方的分類進行講解。
jQuery的選擇器支援CSS 3選擇器標準. 下面是W3C最新的CSS3選擇器標準:http://www.w3.org/TR/css3-selectors/。標準中的選擇器都可以在jQuery中使用.
jQuery選擇器按照功能主要分為"選擇"和"過濾". 並且是配合使用的. 可以同時使用組合成一個選擇器字串. 主要的區別是"過濾"作用的選擇器是指定條件從前面匹配的內容中篩選, "過濾"選擇器也可以單獨使用, 表示從全部"*"中篩選. 比如:
- $(":[title]")
等同於:
- $("*:[title]")
而"選擇"功能的選擇器則不會有預設的範圍, 因為作用是"選擇"而不是"過濾",下面的選擇器分類中, 帶有"過濾器"的分類表示是"過濾"選擇器, 否則就是"選擇"功能的選擇器.jQuery選擇器分為如下幾類:
1. 基礎選擇器Basics
2.層次選擇器Hierarchy
3.基本過濾器Basic Filters
4. 內容過濾器Content Filters
5.可見性過濾器Visibility Filters
6.屬性過濾器Attribute Filters
7.子元素過濾器Child Filters
8.表單選擇器Forms
9.表單過濾器Form Filters