jQuery-是輕量級的js庫 , (IE 6.0+, FF 1.5+, Safari 2.0+, Opera 9.0+), jQuery2.0及后續(xù)版本將不再支持IE6/7/8瀏覽器。jQuery使用戶能更方便地處理HTML(標(biāo)準(zhǔn)通用的標(biāo)記語言 下的一個應(yīng)用)、events、實現(xiàn)動畫效果,并且方便地為網(wǎng)站提供AJAX交互。jQuery還有一個比較大的優(yōu)勢是,它的文檔說明很全,而且各種應(yīng)用也說得很詳細(xì),同時還有許多成熟的插件 可供選擇。jQuery能夠使用戶的html頁面保持代碼和html內(nèi)容分離,也就是說,不用再在html里面插入一堆js來調(diào)用命令了,只需要定義id即可
創(chuàng)新互聯(lián)公司專注網(wǎng)站設(shè)計,以設(shè)計驅(qū)動企業(yè)價值的持續(xù)增長,網(wǎng)站,看似簡單卻每一個企業(yè)都需要——設(shè)計,看似簡潔卻是每一位設(shè)計師的心血 十余年來,我們只專注做網(wǎng)站。認(rèn)真對待每一個客戶,我們不用口頭的語言來吹擂我們的優(yōu)秀,上1000家的成功案例見證著我們的成長。
jQuery是一個兼容多瀏覽器的javascript庫,核心理念是write less,do more(寫得更少,做得更多)。jQuery在2006年1月由美國人John Resig在紐約的barcamp發(fā)布,吸引了來自世界各地的眾多JavaScript高手加入,由Dave Methvin率領(lǐng)團隊進(jìn)行開發(fā)。如今,jQuery已經(jīng)成為最流行的javascript庫,在世界前10000個訪問最多的網(wǎng)站中,有超過55%在使用jQuery。
jQuery是免費、開源的,使用MIT許可協(xié)議。jQuery的語法設(shè)計可以使開發(fā)者更加便捷,例如操作文檔對象、選擇DOM元素、制作動畫效果、事件處理、使用Ajax以及其他功能。除此以外,jQuery提供API讓開發(fā)者編寫插件。其模塊化的使用方式使開發(fā)者可以很輕松的開發(fā)出功能強大的靜態(tài)或動態(tài)網(wǎng)頁。
jQuery,顧名思議,也就是JavaScript和查詢(Query),即是輔助JavaScript開發(fā)的庫。
不用任何配置,自動就實現(xiàn)了。你require哪個就加載哪個。比如b頁面只 require了 update.js和 jquery.js, 那B就只加載這2個。
div class="wrapper"
pspan用戶名:/spaninput type="" name="" id="user" value="" //p
pspan密碼:/spaninput type="password" name="" id="password" value="" //p
pbutton onclick="fn()"登錄/button/p
/div
script type="text/javascript"
function fn(){
var user = $("#user").val()
var Password = $("#password").val()
if(user Password){
//向后臺發(fā)送處理數(shù)據(jù)
$.ajax({
type: "POST", //用POST方式傳輸
dataType: "text", //數(shù)據(jù)格式:JSON
url: 'Login.ashx', //目標(biāo)地址
data: "user=" + user + "Password=" + Password, //用戶名和密碼傳給后臺
error: function (XMLHttpRequest, textStatus, errorThrown) { },
success: function (msg){
if(msg.flag == '0'){
alert("登錄成功")
}else{
alert("登錄失敗")
}
}
});
}else{
alert("用戶名或密碼不能為空")
return
}
}
/script
使用步驟如下:
1.jQuery給放到一個文件夾里面,方便我們待會引用這個jQuery,這里我就放到我項目的js文件夾里面。
2.然后我們來開始編輯HTML界面代碼。
3.使用script標(biāo)簽把jQuery引入到我們的HTML界面。src引號里面的就是我們的jQuery路徑名稱。
4.接著再書寫一個script標(biāo)簽對,里面寫上jQuery入口函數(shù),這樣,當(dāng)我們的HTML加載完成之后就會執(zhí)行我們的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、實現(xiàn)動畫效果,并且方便地為網(wǎng)站提供AJAX交互。jQuery還有一個比較大的優(yōu)勢是,它的文檔說明很全,而且各種應(yīng)用也說得很詳細(xì),同時還有許多成熟的插件可供選擇。jQuery能夠使用戶的html頁面保持代碼和html內(nèi)容分離,也就是說,不用再在html里面插入一堆js來調(diào)用命令了,只需要定義id即可。
jQuery是一個兼容多瀏覽器的javascript庫,核心理念是write less,do more(寫得更少,做得更多)。jQuery在2006年1月由美國人John Resig在紐約的barcamp發(fā)布,吸引了來自世界各地的眾多JavaScript高手加入,由Dave Methvin率領(lǐng)團隊進(jìn)行開發(fā)。如今,jQuery已經(jīng)成為最流行的javascript庫,在世界前10000個訪問最多的網(wǎng)站中,有超過55%在使用jQuery。
jQuery是免費、開源的,使用MIT許可協(xié)議。jQuery的語法設(shè)計可以使開發(fā)更加便捷,例如操作文檔對象、選擇DOM元素、制作動畫效果、事件處理、使用Ajax以及其他功能。除此以外,jQuery提供API讓開發(fā)者編寫插件。其模塊化的使用方式使開發(fā)者可以很輕松的開發(fā)出功能強大的靜態(tài)或動態(tài)網(wǎng)頁。
jQuery,顧名思義,也就是JavaScript和查詢(Query),即是輔助JavaScript開發(fā)的庫。
歷史
大概在 1992 年,一家稱作 Nombas 的公司開發(fā)了一種叫做 C 減減(C-minus-minus,簡稱 Cmm)的嵌入式腳本語言。Cmm 背后的理念很簡單:一個足夠強大可以替代宏操作(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 的調(diào)制解調(diào)器連接到網(wǎng)絡(luò),即便這時網(wǎng)頁已經(jīng)不斷地變得更大和更復(fù)雜。而更加加劇用戶痛苦的是,僅僅為了簡單的表單有效性驗證,就要與服務(wù)器進(jìn)行多次地往返交互。設(shè)想一下,用戶填完一個表單,點擊提交按鈕,等待了 30 秒的處理后,看到的卻是一條告訴你忘記填寫一個必要的字段。
那時正處于技術(shù)革新最前沿的 Netscape,開始認(rèn)真考慮開發(fā)一種客戶端腳本語言來解決簡單的處理問題。
當(dāng)時工作于 Netscape 的 Brendan Eich,開始著手為即將在 1995 年發(fā)行的 Netscape Navigator 2.0 開發(fā)一個稱之為 LiveScript 的腳本語言,當(dāng)時的目的是在瀏覽器和服務(wù)器(本來要叫它 LiveWire)端使用它。Netscape 與 Sun 及時完成 LiveScript 實現(xiàn)。
就在 Netscape Navigator 2.0 即將正式發(fā)布前,Netscape 將其更名為 JavaScript,目的是為了利用 Java 這個因特網(wǎng)時髦詞匯。Netscape 的賭注最終得到回報,JavaScript 從此變成了因特網(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ā)展的同時,一些大的廠商也看中了商機。2009年9月,微軟和諾基亞公司正式宣布支持開源的jQuery庫,另外,微軟公司還宣稱他們將把jQuery作為Visual Studio工具集的一部分。他將提供包括jQuery的智能提示、代碼片段、示例文檔編制等內(nèi)容在內(nèi)的功能。微軟和諾基亞公司將長期成為jQuery的用戶成員,其他成員還有Google,Intel,IBM,Intuit等公司。
2009年1月,jQuery 1.3版發(fā)布,它使用了全新的選擇符引擎Sizzle,在各個瀏覽器下全面超越其他同類型JavaScript框架的查詢速度,程序庫的性能也因此有了極大提升。這一版本的第2個變化就是提供live()方法,使用live()方法可以為當(dāng)前及將來增加的元素綁定事件,在1.3版之前,如果要為將來增加的元素綁定事件,需要使用livequery插件,而在1.3版中,可以直接用live()方法?!?005年8月,John Resig提議改進(jìn)Prototype的“Behaviour”庫,于是他在blog上發(fā)表了自己的想法,并用了3個例子做說明。
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.通過插件來擴展
4.方便的工具 - 例如瀏覽器版本判斷
5.漸進(jìn)增強
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()方法的底層處理機制。另外,也支持查詢的元素按文檔順序返回。
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之外的傳輸機制,比如JSONP請求,jXHR對象也可以進(jìn)行處理。(詳情可以參見:jQuery.ajax文檔)
此外,系統(tǒng)的可擴展性大大增強,可以附加各種數(shù)據(jù)處理器、過濾器和傳輸機制,為開發(fā)新的Ajax插件提供了方便。
2. 延遲對象
延遲對象(Deferred Object,jQuery.Deferred對象)是一個可鏈接的(chainable)實用工具對象,實現(xiàn)了Promise接口,可以在回調(diào)隊列中注冊多個回調(diào)、調(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程序?qū)⒆詣荧@得這一功能。
開發(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提供了一種創(chuàng)建和修改jQuery副本的方式??梢杂脕硖砑硬幌蛲獠抗_的方法,或者對jQuery的某些方法進(jìn)行重新定義以提供新功能,或者提供更好的封裝、避免名稱空間沖突。當(dāng)然,也可以用來開發(fā)插件,但Resig強烈建議在開發(fā)插件之前,先考慮jQuery UI widget工廠。
值得注意的是,sub函數(shù)并不提供真正的隔離,所有方法、數(shù)據(jù)、調(diào)用仍然依靠jQuery本身來支持。
4. 遍歷性能提高
在新版本中.children(),.prev(),.next()幾個常用的遍歷函數(shù)性能有了顯著提高。
5. 內(nèi)部開發(fā)系統(tǒng)
John Resig還特別提到了jQuery團隊內(nèi)部開發(fā)系統(tǒng)的兩點改變:一是服務(wù)器端用Node.js替換了老的Java/Rhino系統(tǒng),使得團隊可以專注于JavaScript環(huán)境的新變化;二是所用的代碼優(yōu)化程序從Google Closure切換到UglifyJS,新工具的壓縮效果非常令人滿意。
使用方法
jQuery可以下載使用,有兩個版本的 jQuery 可供下載
Production version - 用于實際的網(wǎng)站中,已被精簡和壓縮。
Development version - 用于測試和開發(fā)(未壓縮,是可讀的代碼)
jQuery 1.8.0版時壓縮前后的對比
插件機制
jQuery的官方插件是jQuery UI。開發(fā)者可以任意擴展jQuery的函數(shù)庫或者按照自己的需求開發(fā)UI組件。網(wǎng)上已經(jīng)有數(shù)以萬計的jQuery插件,覆蓋各種各樣的需求。例如Ajax輔助、數(shù)據(jù)表格、動態(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)了跨平臺,在許多設(shè)備和瀏覽器中無縫的運行。
使用項目甘特圖中內(nèi)置的調(diào)度,依賴等功能實現(xiàn)任務(wù)分層列表的可視化。
使用資源甘特圖實現(xiàn)一個資源利用視圖。
使用基于API的jQuery或者基于API的MVC可幫您輕松地安裝甘特圖并加快應(yīng)用速度。
可與諸如KnockOut(KO),jQuery.tmpl等流行的jQuery模式一同使用。
Base做的事情包括:
給模塊增加自定義事件支持
給模塊增加set和get方法
設(shè)置一些默認(rèn)執(zhí)行的方法,比如_init
提供模塊的構(gòu)建功能
提供模塊的擴展功能
自定義事件
自定義事件模式是非常實用的,自定義事件用比較專業(yè)的詞語描述的話,可以稱為觀察者模式,這種模式背后的主要動機就是促進(jìn)形成松散耦合。在這種模式中,并不是一個對象調(diào)用另外一個對象的方法,而是一個對象訂閱另外一個對象的特定活動并在狀態(tài)改變后等到通知。這意味著我們在做一些事情的時候,不需要關(guān)注另外事情的進(jìn)展,讓另外一件事情來監(jiān)聽進(jìn)展,然后做出對應(yīng)的處理即可。這樣的話,不同的事情之間就不會存在太多的關(guān)聯(lián),從而降低開發(fā)的復(fù)雜度。
set和get方法
為了保護(hù)和更好地穩(wěn)定模塊的執(zhí)行,需要對模塊參數(shù)的修改做一些限制和處理。所以需要提供set和get方法(現(xiàn)在的Base還沒有在get的時候做一些處理),set可以用于在設(shè)置模塊屬性的時候,做一些過濾和處理,保證設(shè)置值的正確性,而且更重要的是,可以在set中觸發(fā)一個屬性修改的事件,從而可以做到修改屬性的時候觸發(fā)一些其他的變化。get則可以用于在訪問屬性的時候,對返回的屬性做一些處理。對于模塊內(nèi)部而言,還需要有一個私有的_set和_get屬性,從而可以和外部對模塊的訪問進(jìn)行區(qū)分。
一些默認(rèn)執(zhí)行的方法
默認(rèn)執(zhí)行的方法會在兩個地方存放,一個是在構(gòu)造函數(shù)中,還有一個是在模塊原型上的initliazer方法中。構(gòu)造函數(shù)內(nèi)主要處理模塊間和實例的關(guān)系,這些處理是會繼承到子模塊中的,而在initliazer中主要處理模塊真正相關(guān)的要執(zhí)行的一些實例化方法,這樣能保證模塊在被繼承的時候,自有的一些初始化方法不會被繼承下去。而initliazer方法是由_init方法調(diào)用的,_init方法是模塊實例化的時候必定會執(zhí)行的方法,而initliazer是一個可選的初始化方法。
模塊的構(gòu)建和擴展
Base核心部分就是對模塊的構(gòu)建和擴展。先上代碼
Base._build = function (moduleName, superModule, prototypeMethod, attrMember, staticMember, curConstructor) {
//使用prototype方式繼承
var Module = function () {
Module.superclass.constructor.apply(this, arguments);
//保存對實例的引用
Module._instances[$.zid(this)] = this;
};
if(curConstructor){
Module = curConstructor;
}
//如果給定了構(gòu)造函數(shù),就在給定的構(gòu)造函數(shù)上進(jìn)行擴展,否則試用默認(rèn)的構(gòu)造函數(shù)
return Base._handlerClass(moduleName, Module, superModule, prototypeMethod, attrMember, staticMember)
};
Base._handlerClass = function (moduleName, module, superModule, prototypeMethod, attrMember, staticMember) {
var tempFn = function () {
},
o = {
name:moduleName,
value:module
};
//創(chuàng)建對象來保存實例的引用
module._instances = {};
//模塊NAME
if (moduleName) {
module.NAME = moduleName;
}
/*Module.toString = function(){
return moduleName;
};*/
//如果沒有傳入要繼承的對象,則默認(rèn)為Base
superModule = superModule || Base;
attrMember = attrMember || {};
staticMember = staticMember || {};
prototypeMethod = prototypeMethod || {};
//掛載ATTRS屬性
//如果是繼承于另外一個模塊,則需要將ATTRS進(jìn)行合并處理
if (superModule.NAME !== BASE) {
$.extend(attrMember, superModule.ATTRS);
}
//@20120830修復(fù)構(gòu)造函數(shù)自帶ATTRS時對應(yīng)的處理方式
module.ATTRS = module.ATTRS || {};
$.extend(module.ATTRS, attrMember);
//掛在靜態(tài)屬性
$.extend(module, staticMember);
//拷貝一份prototype,防止構(gòu)造函數(shù)直接執(zhí)行
tempFn.prototype = superModule.prototype;
module.prototype = new tempFn();
//把方法添加到Module的原型上
$.extend(module.prototype, prototypeMethod);
//修改構(gòu)造器,防止回溯失敗
module.prototype.constructor = module;
//保存對超類的引用
module.superclass = superModule.prototype;
if (superModule.prototype.constructor == Object.prototype.constructor) {
superModule.prototype.constructor = superModule;
}
//保存生成的對象
Base.classList.push(o);
return module;
};
代碼細(xì)節(jié)都有注釋,就不多說,主要還是把具體做的事情描述下
確定構(gòu)造函數(shù)。
創(chuàng)建一個空對象來保存實例的引用。
確定模塊名。
確定是否繼承于其他模塊。
拷貝參數(shù)的策略(ATTRS)和靜態(tài)成員
創(chuàng)建原型并拷貝實例成員(原型上的成員)
修復(fù)創(chuàng)建原型后構(gòu)造器指向不對的問題
創(chuàng)建對超類的引用,從而可以手動訪問超類
保存生存的對象引用
返回改造完成后的模塊
注:以上構(gòu)造模塊的思路主要參考自YUI3的Base模塊。
在下一篇中,將用這個Base模塊來構(gòu)建一個tab組件