從零開始學習jQuery (二) 萬能的選擇器

作者: ziqiu.zhang  來源: 博客園  發布時間: 2009-05-05 11:26  閱讀: 36183 次  推薦: 6   原文鏈接   [收藏]  
 
摘要:本章講解jQuery最重要的選擇器部分的知識. 有了jQuery的選擇器我們幾乎可以獲取頁面上任意的一個或一組對象, 可以明顯減輕開發人員的工作量.
[1] Dom對象和jQuery包裝集
[2] 什么是jQuery選擇器
[3] 基礎選擇器 Basics

系列文章導航:

從零開始學習jQuery (一) 開天辟地入門篇

從零開始學習jQuery (二) 萬能的選擇器

從零開始學習jQuery (三) 管理jQuery包裝集

從零開始學習jQuery (四) 使用jQuery操作元素的屬性與樣式

從零開始學習jQuery (五) 事件與事件對象

從零開始學習jQuery (六) AJAX快餐

從零開始學習jQuery (七) jQuery動畫-讓頁面動起來!

從零開始學習jQuery (九) jQuery工具函數

從零開始學習jQuery (十) jQueryUI常用功能實戰

從零開始學習jQuery (十一) 實戰表單驗證與自動完成提示插件

 

一.摘要

本章講解jQuery最重要的選擇器部分的知識. 有了jQuery的選擇器我們幾乎可以獲取頁面上任意的一個或一組對象, 可以明顯減輕開發人員的工作量.

二.前言

編寫任何javascript程序我們要首先獲得對象, jQuery選擇器能徹底改變我們平時獲取對象的方式, 可以獲取幾乎任何語意的對象, 比如"擁有title屬性并且值中包含test的元素", 完成這些工作只需要編寫一個jQuery選擇器字符串. 學習jQuery選擇器是學習jQuery最重要的一步.

三.Dom對象和jQuery包裝集

無論是在寫程序還是看API文檔,  我們要時刻注意區分Dom對象和jQuery包裝集.

1.Dom對象

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

我們經常使用 document.getElementById 方法根據id獲取單個Dom對象, 或者使用 document.getElementsByTagName 方法根據HTML標簽名稱獲取Dom對象集合.

另外在事件函數中, 可以通過在方法函數中使用this引用事件觸發對象(但是在多播事件函數中IE6存在問題), 或者使用event對象的target(FF)或srcElement(iIE6)獲取到引發事件的Dom對象

注意我們這里獲取到的都是Dom對象, Dom對象也有不同的類型比如input, div, span等.  Dom對象只有有限的屬性和方法:

image

2.jQuery包裝集

jQuery包裝集可以說是Dom對象的擴充.在jQuery的世界中將所有的對象, 無論是一個還是一組, 都封裝成一個jQuery包裝集,比如獲取包含一個元素的jQuery包裝集:

var jQueryObject = $("#testDiv");

jQuery包裝集都是作為一個對象一起調用的. jQuery包裝集擁有豐富的屬性和方法, 這些都是jQuery特有的:

image

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方法"等問題迷惑.  直到某一天豁然開朗, 發現只要能夠區分這兩者, 就能夠在寫程序時變得清清楚楚.

6
0
 
 
 

文章列表

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()