jquery 簡介
JQuery是繼prototype之後又一個優(yōu)秀的Javascript函式庫。它是輕量級的js庫,它相容於CSS3,也相容於各種瀏覽器(IE?6.0+,?FF1.5+,?Safari?2.0+,?Opera?9.0+),jQuery2.0及後續(xù)版本將不再支援IE6/ 7/8瀏覽器。 jQuery讓用戶能更方便地處理HTML(標(biāo)準(zhǔn)通用標(biāo)記語言下的一個應(yīng)用程式)、events、實作動畫效果,並且方便地為網(wǎng)站提供AJAX互動。 jQuery還有一個比較大的優(yōu)點是,它的文件說明很全,而且各種應(yīng)用也說得很詳細(xì),同時還有許多成熟的插件可供選擇。 jQuery能夠讓使用者的html頁面保持程式碼和html內(nèi)容分離,也就是說,不用再在html裡面插入一堆js來呼叫指令了,只需要定義id即可。
jQuery是一個相容多瀏覽器的javascript函式庫,核心概念是write less,do more(寫得更少,做得更多)。 jQuery在2006年1月由美國人John Resig在紐約的barcamp發(fā)布,吸引了來自世界各地的眾多JavaScript高手加入,由Dave Methvin率領(lǐng)團(tuán)隊進(jìn)行開發(fā)。如今,jQuery已成為最受歡迎的javascript函式庫,在全球前10,000個造訪最多的網(wǎng)站中,有超過55%在使用jQuery。
jQuery是免費、開源的,使用MIT授權(quán)協(xié)議。 jQuery的語法設(shè)計可以讓開發(fā)更加便捷,例如操作文件物件、選擇DOM元素、製作動畫效果、事件處理、使用Ajax以及其他功能。除此之外,jQuery提供API讓開發(fā)者編寫外掛程式。其模組化的使用方式使開發(fā)者可以輕鬆的開發(fā)出功能強(qiáng)大的靜態(tài)或動態(tài)網(wǎng)頁。
jQuery,顧名思義,也就是JavaScript和查詢(Query),也就是輔助JavaScript開發(fā)的函式庫。
歷史
#大概在1992 年,一家稱作Nombas 的公司開發(fā)了一種叫做C 減減(C-minus-minus,簡稱Cmm)的嵌入式腳本語言。 Cmm 背後的理念很簡單:一個足夠強(qiáng)大可以取代巨集操作(macro)的腳本語言,同時保持與 C (和 C ++)足夠的相似性,以便開發(fā)人員能很快學(xué)會。這個腳本語言捆綁在一個稱為 CEnvi 的共享軟體中,它首次向開發(fā)人員展示了這種語言的威力。
Nombas 最後把 Cmm 的名字改成了 ScriptEase,原因是後面的部分(mm)聽起來過於消極,同時字母 C 「令人害怕」。
當(dāng) Netscape Navigator 嶄露頭角時,Nombas 開發(fā)了一個可以嵌入網(wǎng)頁中的 CEnvi 的版本。這些早期的試驗被稱為 Espresso Page(濃縮咖啡般的頁面),它們代表了第一個在萬維網(wǎng)上使用的客戶語言。而 Nombas 絲毫沒有料到它的理念將會成為萬維網(wǎng)的一塊重要基石。
當(dāng)網(wǎng)路衝浪越來越流行時,對於開發(fā)客戶端腳本的需求也逐漸增加。此時,大部分因特網(wǎng)用戶還僅透過 28.8 kbit/s 的數(shù)據(jù)機(jī)連接到網(wǎng)絡(luò),即便這時網(wǎng)頁已經(jīng)不斷地變得更大和更複雜。而更加劇使用者痛苦的是,僅僅為了簡單的表單有效性驗證,就要與伺服器進(jìn)行多次往返互動。設(shè)想一下,使用者填完一個表單,點擊提交按鈕,等待了 30 秒的處理後,看到的卻是一條告訴你忘記填寫一個必要的欄位。
當(dāng)時正處於技術(shù)革新最前沿的 Netscape,開始認(rèn)真考慮開發(fā)一種客戶端腳本語言來解決簡單的處理問題。
當(dāng)時工作於Netscape 的Brendan Eich,開始著手為即將在1995 年發(fā)行的Netscape Navigator 2.0 開發(fā)一個稱為LiveScript 的腳本語言,當(dāng)時的目的是在瀏覽器和伺服器(本來要叫它LiveWire)端使用它。 Netscape 與 Sun 及時完成 LiveScript 實作。
就在 Netscape Navigator 2.0 即將正式發(fā)布前,Netscape 將其更名為 JavaScript,目的是為了利用 Java 這個因特網(wǎng)時髦詞彙。 Netscape 的賭注最終得到回報,JavaScript 從此變成了網(wǎng)際網(wǎng)路的必備元件。
因為 JavaScript 1.0 如此成功,Netscape 在 Netscape Navigator 3.0 中發(fā)布了 1.1 版。恰巧那個時候,微軟決定進(jìn)軍瀏覽器,發(fā)布了 IE 3.0 並搭載了一個 JavaScript 的克隆版,叫做 JScript(這樣命名是為了避免與 Netscape 潛在的許可糾紛)。微軟步入 Web 瀏覽器領(lǐng)域的這一重要一步雖然令其聲名狼藉,但也成為 JavaScript 語言發(fā)展過程中的重要一步。
在微軟進(jìn)入後,有 3 種不同的 JavaScript 版本同時存在:Netscape Navigator 3.0 中的 JavaScript、IE 中的 JScript 以及 CEnvi 中的 ScriptEase。與 C 和其他程式語言不同的是,JavaScript 並沒有一個標(biāo)準(zhǔn)來統(tǒng)一其語法或特性,而這 3 種不同的版本恰恰突顯了這個問題。隨著業(yè)界擔(dān)心的增加,這個語言的標(biāo)準(zhǔn)化顯然已經(jīng)勢在必行。
2006年1月,jQuery的第一個版本面世,至今已經(jīng)有10年多了(註:這個時間點是截止至出書時間)。雖然過了這麼久,但它依然以其簡潔、靈活的程式風(fēng)格讓人一見傾心。在本篇文章中,我們將講述jQuery的發(fā)展歷史,讓讀者對jQuery有更多的了解。
在jQuery快速發(fā)展的同時,一些大的廠商也看中了商機(jī)。 2009年9月,微軟和諾基亞公司正式宣布支援開源的jQuery函式庫,另外,微軟公司也宣稱他們將把jQuery當(dāng)作Visual Studio工具集的一部分。他將提供包括jQuery的智慧提示、程式碼片段、範(fàn)例文件編制等內(nèi)容在內(nèi)的功能。微軟和諾基亞公司將長期成為jQuery的使用者成員,其他成員包括Google,Intel,IBM,Intuit等公司。
2009年1月,jQuery 1.3版發(fā)布,它使用了全新的選擇符引擎Sizzle,在各個瀏覽器下全面超越其他同類型JavaScript框架的查詢速度,程式庫的效能也因此有了極大提升。這版本的第2個變更就是提供live()方法,使用live()方法可以為目前及將來增加的元素綁定事件,在1.3版之前,如果要為將來增加的元素綁定事件,需要使用livequery插件,而在1.3版中,可以直接用live()方法?!?005年8月,John Resig提議改進(jìn)Prototype的「Behaviour」庫,於是他在blog上發(fā)表了自己的想法,並用了3個例子做說明。
當(dāng)時John的想法很簡單:他發(fā)現(xiàn)這種語法相對現(xiàn)有的JavaScript函式庫比較為簡潔。但他沒想到的是,這篇文章一發(fā)佈就引起了業(yè)界的廣泛關(guān)注。於是John開始認(rèn)真思考這件事(編寫語法更為簡潔的JavaScript程式庫),直到2006年1月14日,John正式宣布以jQuery的名稱發(fā)布自己的程式庫。隨之而來的是jQuery的快速發(fā)展。
2006年8月,jQuery的第一個穩(wěn)定版本,並且已經(jīng)支援CSS選擇符、事件處理和AJAX互動。
2007年7月,jQuery 1.1.3版發(fā)布,這次小版本的變化包含了對jQuery選擇符引擎執(zhí)行速度的顯著提升。從這個版本開始,jQuery的效能達(dá)到了Prototype、Mootools以及Dojo等同類JavaScript函式庫的水平。同年9月,jQuery 1.2版發(fā)布,它去掉了對XPath選擇符的支持,原因是相對於CSS語法它已經(jīng)變得多餘了。這一版能夠?qū)πЧM(jìn)行更為靈活的定制,而且借助新增的命名空間事件,也使插件開發(fā)變得更容易。同時,jQuery UI專案也開始啟動,這個新的套件是作為曾經(jīng)流行但過時的Interface插件的替代專案而發(fā)布的。 jQuery UI中包含大量預(yù)先定義好的元件(widget),以及一組用於建立進(jìn)階元素(例如可拖曳、拖曳、排序)的工具。
2010年2月,jQuery 1.4.2版發(fā)布,它新增了兩個關(guān)於事件委託的方法:delegate()和undelegate()。 delegate()用於取代1.3.2中的live()方法。這個方法比live()來的方便,而且也可以達(dá)到動態(tài)加入事件的作用。例如給表格的每個td綁定hover事件
特點
1.動態(tài)特效
2.AJAX
3.通過插件來擴(kuò)展
4.方便的工具 - 例如瀏覽器版本判斷
5.漸進(jìn)增強(qiáng)
6.鏈?zhǔn)秸{(diào)用
7.多瀏覽器支持,支持Internet Explorer6.0+、Opera9.0+、Firefox2+、Safari2.0+、Chrome1.0+(在2.0.0中取消了對Internet Explorer6,7,8的支持)
歷史版本
jQuery 1.0
(2006年8月):該庫的第一個穩(wěn)定版本,已經(jīng)具有了對CSS選擇符、事件處理和AJAX交互的穩(wěn)健支持。
jQuery 1.1
(2007年1月):這一版大幅簡化了API。許多較少使用的方法被合并,減少了需要掌握和解釋的方法數(shù)量。
jQuery 1.1.3
(2007年7月):這次小版本變化包含了對jQuery選擇符引擎執(zhí)行速度的顯著提升。從這個版本開始,jQuery的性能達(dá)到了Prototype、Mootools以及Dojo等同類JavaScript庫的水平。
jQuery 1.2
(2007年9月):這一版去掉了對XPath選擇符的支持,原因是相對于CSS語法它已經(jīng)變得多余了。這一版能夠支持對效果的更靈活定制,而且借助新增的命名空間事件,也使插件開發(fā)變得更容易。
jQuery UI(2007年9月):這個新的插件套件是作為曾經(jīng)流行但已過時的Interface插件的替代項目而發(fā)布的。jQuery UI中包含大量預(yù)定義好的部件(widget),以及一組用于構(gòu)建高級元素(例如可拖放的界面元素)的工具。
jQuery 1.2.6
(2008年5月):這一版主要是將Brandon Aaron開發(fā)的流行的Dimensions插件的功能移植到了核心庫中。
jQuery 1.3
(2009年1月):這一版使用了全新的選擇符引擎Sizzle,庫的性能也因此有了極大提升。這一版正式支持事件委托特性。
jQuery 1.3.2
(2009年2月):這次小版本升級進(jìn)一步提升了庫的性能,例如改進(jìn)了:visible/:hidden選擇符、.height()/.width()方法的底層處理機(jī)制。另外,也支持查詢的元素按文檔順序返回。
jQuery 1.4
(2010年1月14號):對代碼庫進(jìn)行了內(nèi)部重寫組織,開始建立一些風(fēng)格規(guī)范。老的core.js文件被分為attribute.js,css.js,data.js,manipulation.js,traversing.js和queue.js;CSS和attribute的邏輯分離。
重要變化:
1. Ajax重寫
#Ajax模組完全進(jìn)行了重寫。新增一個jXHR對象,為不同瀏覽器內(nèi)建的XMLHttpRequest提供了一致的超集。對於XMLHttpRequest之外的傳輸機(jī)制,例如JSONP請求,jXHR物件也可以進(jìn)行處理。 (詳情可參考:jQuery.ajax文件)
此外,系統(tǒng)的可擴(kuò)充性大大增強(qiáng),可以附加各種資料處理器、過濾器和傳輸機(jī)制,為開發(fā)新的Ajax插件提供了方便。
2. 延遲對象
延遲對象(Deferred Object,jQuery.Deferred對象)是一個可連結(jié)的(chainable)實用工具對象,實作了Promise接口,可以在回呼隊列中註冊多個回調(diào)、呼叫回調(diào)佇列並轉(zhuǎn)發(fā)任何同步/非同步函數(shù)的成敗狀態(tài)。如同Using Deferreds in jQuery 1.5一文中所說明的,其結(jié)果是在jQuery中能夠?qū)⒁蕾囲赌硞€任務(wù)(事件)結(jié)果的邏輯與任務(wù)本身解耦了。這點在JavaScript中其實並不新鮮,Mochikit和Dojo等已經(jīng)實現(xiàn)有些日子了。由於jQuery 1.5的Ajax模組內(nèi)建使用了延遲對象,因此透過jQuery編寫Ajax程式將自動獲得此功能。
開發(fā)人員藉此可以使用無法立即取得的回傳值(如非同步Ajax請求的回傳結(jié)果),而且第一次能夠附加多個事件處理器。
例如,使用了新的jQuery內(nèi)部Ajax API就可以實現(xiàn)下面的程式碼了:
// Assign handlers immediately after making the request,// and remember the jxhr object for this request var jxhr = $.ajax({ url: "example.php" }) .success(function() { alert("success"); }) .error(function() { alert("error"); }) . complete(function() { alert("complete"); });// perform other work here ... // Set another completion function for the request above jxhr.complete(function(){ alert("second complete") ; });
此外,使用jQuery.Deferred還可以開發(fā)自己的延遲物件。更多詳情請參閱:延遲物件文件。
3. jQuery.sub()
jQuery 1.5提供了一個建立和修改jQuery副本的方式??梢杂脕硇略霾幌蛲獠抗_的方法,或?qū)Query的某些方法進(jìn)行重新定義以提供新功能,或提供更好的封裝、避免名稱空間衝突。當(dāng)然,也可以用來開發(fā)插件,但Resig強(qiáng)烈建議在開發(fā)插件之前,先考慮jQuery UI widget工廠。
值得注意的是,sub函數(shù)並沒有提供真正的隔離,所有方法、資料、呼叫仍然依靠jQuery本身來支援。
4. 遍歷效能提高
在新版本中.children(),.prev(),.next()幾個常用的遍歷函數(shù)效能有了顯著提升。
5. 內(nèi)部開發(fā)系統(tǒng)
John Resig也特別提到了jQuery團(tuán)隊內(nèi)部開發(fā)系統(tǒng)的兩點改變:一是伺服器端用Node.js取代了舊的Java/Rhino系統(tǒng),讓團(tuán)隊可以專注於JavaScript環(huán)境的新變化;二是所用的程式碼最佳化程式從Google Closure切換到UglifyJS,新工具的壓縮效果非常令人滿意。
使用方法
#jQuery可以下載使用,有兩個版本的jQuery 可供下載
Production version - 用於實際的網(wǎng)站中,已被精簡和壓縮。
Development version - 用於測試和開發(fā)(未壓縮,是可讀的程式碼)
jQuery 1.8.0版時壓縮前後的對比
#插件機(jī)制
jQuery的官方外掛程式是jQuery UI。開發(fā)者可以任意擴(kuò)充jQuery的函式庫或依照自己的需求開發(fā)UI元件。網(wǎng)路上已經(jīng)有數(shù)以萬計的jQuery插件,涵蓋各種各樣的需求。例如Ajax輔助、資料表、動態(tài)清單、XML工具、拖曳、cookie處理、彈出層等等。 jQuery 的文件說明很全,而且各種應(yīng)用也說得很詳細(xì),同時還有許多成熟的插件可供選擇,例如ComponentOne Studio for ASP NET Wijmo.
隨著jQuery插件在網(wǎng)站建設(shè)過程中的使用率不斷的增加,所以有必要跟進(jìn)時代步伐開發(fā)出一些新的插件/程式碼片段,以此來鞏固並提高前端用戶體驗,將用戶體驗提升到一個新的高度。其中包括Flat jQuery Price Slider、Gmaps jQuery Map Plugin 、FormChimp——MailChimp Ajax plugin for jQuery 等。
控制項
jQuery Gantt控制項是基於原生HTML5/jQuery,功能豐富的控件,該控制項真正實現(xiàn)了跨平臺,在許多裝置和瀏覽器中無縫的運行。
使用專案甘特圖中內(nèi)建的調(diào)度,依賴等功能實現(xiàn)任務(wù)分層清單的視覺化。
使用資源甘特圖實作一個資源利用視圖。
使用基於API的jQuery或基於API的MVC可協(xié)助您輕鬆安裝甘特圖並加快應(yīng)用速度。
可與諸如KnockOut(KO),jQuery.tmpl等流行的jQuery模式一同使用。