1. 程式人生 > >改變獲取物件方式 萬能的jQuery選擇器

改變獲取物件方式 萬能的jQuery選擇器

編寫任何javascript程式我們要首先獲得物件,jQuery選擇器可以獲取幾乎任何語意的物件,比如"擁有title屬性並且值中包含test的元素",完成這些工作只需要編寫一個jQuery選擇器字串,學習jQuery選擇器是學習jQuery最重要的一步。

Dom物件和jQuery包裝集

無論是在寫程式還是看API文件,  我們要時刻注意區分Dom物件和jQuery包裝集。

1.Dom物件

在傳統的javascript開發中,我們都是首先獲取Dom物件,比如:

  1. var div = document.getElementById("testDiv");   
  2. var divs = document
    .getElementsByTagName("div"); 

我們經常使用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包裝集:

  1. var jQueryObject = $("#testDiv");

jQuery包裝集都是作為一個物件一起呼叫的. jQuery包裝集擁有豐富的屬性和方法, 這些都是jQuery特有的:

3.Dom物件與jQuery物件的轉換

(1) Dom轉jQuery包裝集

如果要使用jQuery提供的函式,  就要首先構造jQuery包裝集.  我們可以使用本文即將介紹的jQuery選擇器直接構造jQuery包裝集,比如:

  1. $("#testDiv");

上面語句構造的包裝集只含有一個id是testDiv的元素,或者我們已經獲取了一個Dom元素,比如:

  1. var div = document.getElementById("testDiv"); 

上面的程式碼中div是一個Dom元素, 我們可以將Dom元素轉換成jQuery包裝集:

  1. var domToJQueryObject = $(div); 

小竅門:因為有了智慧感知, 所以我們可以通過智慧感知的方法列表來判斷一個物件啊是Dom物件還是jQuery包裝集.

(2) jQuery包裝集轉Dom物件

jQuery包裝集是一個集合, 所以我們可以通過索引器訪問其中的某一個元素:

  1. var domObject = $("#testDiv")[0]; 

注意, 通過索引器返回的不再是jQuery包裝集, 而是一個Dom物件!jQuery包裝集的某些遍歷方法,比如each()中, 可以傳遞遍歷函式, 在遍歷函式中的this也是Dom元素,比如:

  1. $("#testDiv").each(function() { alert(this) })

如果我們要使用jQuery的方法操作Dom物件,怎麼辦? 用上面介紹過的轉換方法即可:

  1. $("#testDiv").each(function() { $(this).html("修改內容") })

小結: 先讓大家明確Dom物件和jQuery包裝集的概念, 將極大的加快我們的學習速度. 我在學習jQuery的過程中就花了很長時間沒有領悟到兩者的具體差異, 因為書上並沒有專門講解兩者的區別, 所以經常被"this指標為何不能呼叫jQuery方法"等問題迷惑.  直到某一天豁然開朗, 發現只要能夠區分這兩者, 就能夠在寫程式時變得清清楚楚。

--------------------------------------------------------------------------------------------------

什麼是jQuery選擇器

在Dom程式設計中我們只能使用有限的函式根據id或者TagName獲取Dom物件,在jQuery中則完全不同,jQuery提供了異常強大的選擇器用來幫助我們獲取頁面上的物件, 並且將物件以jQuery包裝集的形式返回,首先來看看什麼是選擇器:

  1. //根據ID獲取jQuery包裝集   
  2. ar jQueryObject = $("#testDiv"); 

上例中使用了ID選擇器, 選取id為testDiv的Dom物件並將它放入jQuery包裝集, 最後以jQuery包裝集的形式返回。"$"符號在jQuery中代表對jQuery物件的引用, "jQuery"是核心物件, 其中包含下列方法:

  1. jQuery( expression, context )   
  2. Returns: jQuery 

這個函式接收一個CSS選擇器的字串,然後用這個字串去匹配一組元素。

  1. jQuery( html, ownerDocument )   
  2. Returns: jQuery 

根據HTML原始字串動態建立Dom元素.

  1. jQuery( elements )   
  2. Returns: jQuery 

將一個或多個Dom物件封裝jQuery函式功能(即封裝為jQuery包裝集)

  1. jQuery( callback )   
  2. Returns: jQuery 

Returns的型別為jQuery即表示返回的是jQuery包裝集.其中第一個方法有些問題, 官方介面寫的是CSS選擇器, 但是實際上這個方法不僅僅支援CSS選擇器, 而是所有jQuery支援的選擇器, 有些甚至是jQuery自定義的選擇器(在CSS標準中不存在的選擇器),為了能讓大家理解的更清楚,我們將方法修改如下:

  1. jQuery( selector, context )   
  2. Returns: jQuery  

根據選擇器選取匹配的物件, 以jQuery包裝集的形式返回。context可以是Dom物件集合或jQuery包裝集,傳入則表示要從context中選擇匹配的物件,不傳入則表示範圍為文件物件(即頁面全部物件)。上面這個方法就是我們選擇器使用的核心方法.可以用"$"代替jQuery讓語法更簡介, 比如下面兩句話的效果相同:

  1. //根據ID獲取jQuery包裝集   
  2. var jQueryObject = $("#testDiv");   
  3. //$是jQuery物件的引用:   
  4. 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選擇器按照功能主要分為"選擇"和"過濾". 並且是配合使用的. 可以同時使用組合成一個選擇器字串. 主要的區別是"過濾"作用的選擇器是指定條件從前面匹配的內容中篩選, "過濾"選擇器也可以單獨使用, 表示從全部"*"中篩選. 比如:

  1. $(":[title]") 

等同於:

  1. $("*:[title]") 

而"選擇"功能的選擇器則不會有預設的範圍, 因為作用是"選擇"而不是"過濾",下面的選擇器分類中,  帶有"過濾器"的分類表示是"過濾"選擇器,  否則就是"選擇"功能的選擇器.jQuery選擇器分為如下幾類:

1. 基礎選擇器Basics

基礎選擇器Basics

2.層次選擇器Hierarchy

層次選擇器Hierarchy

3.基本過濾器Basic Filters

基本過濾器Basic Filters

4. 內容過濾器Content Filters

內容過濾器Content Filters

5.可見性過濾器Visibility Filters

可見性過濾器Visibility Filters

6.屬性過濾器Attribute Filters

屬性過濾器Attribute Filters

7.子元素過濾器Child Filters

子元素過濾器Child Filters

8.表單選擇器Forms

表單選擇器Forms

9.表單過濾器Form Filters

表單過濾器Form Filters