Query是繼prototype之后又一個優秀的Javascript庫。它是輕量級的js庫 ,它兼容CSS3,還兼容各種瀏覽器(IE 6.0+, FF1.5+, Safari 2.0+, Opera 9.0+),jQuery2.0及后續版本將不再支持IE6/7/8瀏覽器。jQuery使用戶能更方便地處理HTML(標準通用標記語言下的一個應用)、events、實現動畫效果,并且方便地為網站提供AJAX交互。jQuery還有一個比較大的優勢是,它的文檔說明很全,而且各種應用也說得很詳細,同時還有許多成熟的插件可供選擇。jQuery能夠使用戶的html頁面保持代碼和html內容分離,也就是說,不用再在html里面插入一堆js來調用命令了,只需要定義id即可。
jQuery是一個兼容多瀏覽器的javascript庫,核心理念是write less,do more(寫得更少,做得更多)。jQuery在2006年1月由美國人John Resig在紐約的barcamp發布,吸引了來自世界各地的眾多JavaScript高手加入,由Dave Methvin率領團隊進行開發。如今,jQuery已經成為最流行的javascript庫,在世界前10000個訪問最多的網站中,有超過55%在使用jQuery。
jQuery是免費、開源的,使用MIT許可協議。jQuery的語法設計可以使開發更加便捷,例如操作文檔對象、選擇DOM元素、制作動畫效果、事件處理、使用Ajax以及其他功能。除此以外,jQuery提供API讓開發者編寫插件。其模塊化的使用方式使開發者可以很輕松的開發出功能強大的靜態或動態網頁。
jQuery,顧名思義,也就是JavaScript和查詢(Query),即是輔助JavaScript開發的庫。
歷史
大概在 1992 年,一家稱作 Nombas 的公司開發了一種叫做 C 減減(C-minus-minus,簡稱 Cmm)的嵌入式腳本語言。Cmm 背后的理念很簡單:一個足夠強大可以替代宏操作(macro)的腳本語言,同時保持與 C (和 C ++)足夠的相似性,以便開發人員能很快學會。這個腳本語言捆綁在一個叫做 CEnvi 的共享軟件中,它首次向開發人員展示了這種語言的威力。
Nombas 最終把 Cmm 的名字改成了 ScriptEase,原因是后面的部分(mm)聽起來過于消極,同時字母 C “令人害怕”。
當 Netscape Navigator 嶄露頭角時,Nombas 開發了一個可以嵌入網頁中的 CEnvi 的版本。這些早期的試驗被稱為 Espresso Page(濃咖啡般的頁面),它們代表了第一個在萬維網上使用的客戶端語言。而 Nombas 絲毫沒有料到它的理念將會成為萬維網的一塊重要基石。
當網上沖浪越來越流行時,對于開發客戶端腳本的需求也逐漸增大。此時,大部分因特網用戶還僅僅通過 28.8 kbit/s 的調制解調器連接到網絡,即便這時網頁已經不斷地變得更大和更復雜。而更加加劇用戶痛苦的是,僅僅為了簡單的表單有效性驗證,就要與服務器進行多次地往返交互。設想一下,用戶填完一個表單,點擊提交按鈕,等待了 30 秒的處理后,看到的卻是一條告訴你忘記填寫一個必要的字段。
那時正處于技術革新最前沿的 Netscape,開始認真考慮開發一種客戶端腳本語言來解決簡單的處理問題。
當時工作于 Netscape 的 Brendan Eich,開始著手為即將在 1995 年發行的 Netscape Navigator 2.0 開發一個稱之為 LiveScript 的腳本語言,當時的目的是在瀏覽器和服務器(本來要叫它 LiveWire)端使用它。Netscape 與 Sun 及時完成 LiveScript 實現。
就在 Netscape Navigator 2.0 即將正式發布前,Netscape 將其更名為 JavaScript,目的是為了利用 Java 這個因特網時髦詞匯。Netscape 的賭注最終得到回報,JavaScript 從此變成了因特網的必備組件。
因為 JavaScript 1.0 如此成功,Netscape 在 Netscape Navigator 3.0 中發布了 1.1 版。恰巧那個時候,微軟決定進軍瀏覽器,發布了 IE 3.0 并搭載了一個 JavaScript 的克隆版,叫做 JScript(這樣命名是為了避免與 Netscape 潛在的許可糾紛)。微軟步入 Web 瀏覽器領域的這重要一步雖然令其聲名狼藉,但也成為 JavaScript 語言發展過程中的重要一步。
在微軟進入后,有 3 種不同的 JavaScript 版本同時存在:Netscape Navigator 3.0 中的 JavaScript、IE 中的 JScript 以及 CEnvi 中的 ScriptEase。與 C 和其他編程語言不同的是,JavaScript 并沒有一個標準來統一其語法或特性,而這 3 種不同的版本恰恰突出了這個問題。隨著業界擔心的增加,這個語言的標準化顯然已經勢在必行。
2006年1月,jQuery的第一個版本面世,至今已經有10年多了(注:這個時間點是截止至出書時間)。雖然過了這么久,但它依然以其簡潔、靈活的編程風格讓人一見傾心。在本篇文章中,我們將講述jQuery的發展歷史,讓讀者對jQuery有更多的了解。
在jQuery迅速發展的同時,一些大的廠商也看中了商機。2009年9月,微軟和諾基亞公司正式宣布支持開源的jQuery庫,另外,微軟公司還宣稱他們將把jQuery作為Visual Studio工具集的一部分。他將提供包括jQuery的智能提示、代碼片段、示例文檔編制等內容在內的功能。微軟和諾基亞公司將長期成為jQuery的用戶成員,其他成員還有Google,Intel,IBM,Intuit等公司。
2009年1月,jQuery 1.3版發布,它使用了全新的選擇符引擎Sizzle,在各個瀏覽器下全面超越其他同類型JavaScript框架的查詢速度,程序庫的性能也因此有了極大提升。這一版本的第2個變化就是提供live()方法,使用live()方法可以為當前及將來增加的元素綁定事件,在1.3版之前,如果要為將來增加的元素綁定事件,需要使用livequery插件,而在1.3版中,可以直接用live()方法。 2005年8月,John Resig提議改進Prototype的“Behaviour”庫,于是他在blog上發表了自己的想法,并用了3個例子做說明。
當時John的想法很簡單:他發現這種語法相對現有的JavaScript庫更為簡潔。但他沒想到的是,這篇文章一經發布就引起了業界的廣泛關注。于是John開始認真思考著這件事情(編寫語法更為簡潔的JavaScript程序庫),直到2006年1月14日,John正式宣布以jQuery的名稱發布自己的程序庫。隨之而來的是jQuery的快速發展。
2006年8月,jQuery的第一個穩定版本,并且已經支持CSS選擇符、事件處理和AJAX交互。
2007年7月,jQuery 1.1.3版發布,這次小版本的變化包含了對jQuery選擇符引擎執行速度的顯著提升。從這個版本開始,jQuery的性能達到了Prototype、Mootools以及Dojo等同類JavaScript庫的水平。同年9月,jQuery 1.2版發布,它去掉了對XPath選擇符的支持,原因是相對于CSS語法它已經變得多余了。這一版能夠對效果進行更為靈活的定制,而且借助新增的命名空間事件,也使插件開發變得更容易。同時,jQuery UI項目也開始啟動,這個新的套件是作為曾經流行但已過時的Interface插件的替代項目而發布的。jQuery UI中包含大量預定義好的部件(widget),以及一組用于構建高級元素(例如可拖放、拖拽、排序)的工具。
2010年2月,jQuery 1.4.2版發布,它新增了有關事件委托的兩個方法:delegate()和undelegate()。delegate()用于替代1.3.2中的live()方法。這個方法比live()來的方便,而且也可以達到動態添加事件的作用。比如給表格的每個td綁定hover事件
特點
1.動態特效
2.AJAX
3.通過插件來擴展
4.方便的工具 - 例如瀏覽器版本判斷
5.漸進增強
6.鏈式調用
7.多瀏覽器支持,支持Internet Explorer6.0+、Opera9.0+、Firefox2+、Safari2.0+、Chrome1.0+(在2.0.0中取消了對Internet Explorer6,7,8的支持)
歷史版本
jQuery 1.0
(2006年8月):該庫的第一個穩定版本,已經具有了對CSS選擇符、事件處理和AJAX交互的穩健支持。
jQuery 1.1
(2007年1月):這一版大幅簡化了API。許多較少使用的方法被合并,減少了需要掌握和解釋的方法數量。
jQuery 1.1.3
(2007年7月):這次小版本變化包含了對jQuery選擇符引擎執行速度的顯著提升。從這個版本開始,jQuery的性能達到了Prototype、Mootools以及Dojo等同類JavaScript庫的水平。
jQuery 1.2
(2007年9月):這一版去掉了對XPath選擇符的支持,原因是相對于CSS語法它已經變得多余了。這一版能夠支持對效果的更靈活定制,而且借助新增的命名空間事件,也使插件開發變得更容易。
jQuery UI(2007年9月):這個新的插件套件是作為曾經流行但已過時的Interface插件的替代項目而發布的。jQuery UI中包含大量預定義好的部件(widget),以及一組用于構建高級元素(例如可拖放的界面元素)的工具。
jQuery 1.2.6
(2008年5月):這一版主要是將Brandon Aaron開發的流行的Dimensions插件的功能移植到了核心庫中。
jQuery 1.3
(2009年1月):這一版使用了全新的選擇符引擎Sizzle,庫的性能也因此有了極大提升。這一版正式支持事件委托特性。
jQuery 1.3.2
(2009年2月):這次小版本升級進一步提升了庫的性能,例如改進了:visible/:hidden選擇符、.height()/.width()方法的底層處理機制。另外,也支持查詢的元素按文檔順序返回。
jQuery 1.4
(2010年1月14號):對代碼庫進行了內部重寫組織,開始建立一些風格規范。老的core.js文件被分為attribute.js,css.js,data.js,manipulation.js,traversing.js和queue.js;CSS和attribute的邏輯分離。
重要變化:
1. Ajax重寫
Ajax模塊完全進行了重寫。新增一個jXHR對象,為不同瀏覽器內置的XMLHttpRequest提供了一致的超集。對于XMLHttpRequest之外的傳輸機制,比如JSONP請求,jXHR對象也可以進行處理。(詳情可以參見:jQuery.ajax文檔)
此外,系統的可擴展性大大增強,可以附加各種數據處理器、過濾器和傳輸機制,為開發新的Ajax插件提供了方便。
2. 延遲對象
延遲對象(Deferred Object,jQuery.Deferred對象)是一個可鏈接的(chainable)實用工具對象,實現了Promise接口,可以在回調隊列中注冊多個回調、調用回調隊列并轉發任何同步/異步函數的成敗狀態。正如Using Deferreds in jQuery 1.5一文中說明的,其結果是在jQuery中能夠將依賴于某個任務(事件)結果的邏輯與任務本身解耦了。這一點在JavaScript中其實并不新鮮,Mochikit和Dojo等已經實現有些日子了。由于jQuery 1.5的Ajax模塊內置使用了延遲對象,因此通過jQuery編寫Ajax程序將自動獲得這一功能。
開發人員借此可以使用無法立即獲得的返回值(如異步Ajax請求的返回結果),而且第一次能夠附加多個事件處理器。
例如,使用了新的jQuery內部Ajax API就可以實現下面的代碼了:
// 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還可以開發自己的延遲對象。更多詳情參見:延遲對象文檔。
3. jQuery.sub()
jQuery 1.5提供了一種創建和修改jQuery副本的方式。可以用來添加不向外部公開的方法,或者對jQuery的某些方法進行重新定義以提供新功能,或者提供更好的封裝、避免名稱空間沖突。當然,也可以用來開發插件,但Resig強烈建議在開發插件之前,先考慮jQuery UI widget工廠。
值得注意的是,sub函數并不提供真正的隔離,所有方法、數據、調用仍然依靠jQuery本身來支持。
4. 遍歷性能提高
在新版本中.children(),.prev(),.next()幾個常用的遍歷函數性能有了顯著提高。
5. 內部開發系統
John Resig還特別提到了jQuery團隊內部開發系統的兩點改變:一是服務器端用Node.js替換了老的Java/Rhino系統,使得團隊可以專注于JavaScript環境的新變化;二是所用的代碼優化程序從Google Closure切換到UglifyJS,新工具的壓縮效果非常令人滿意。
使用方法
jQuery可以下載使用,有兩個版本的 jQuery 可供下載
Production version - 用于實際的網站中,已被精簡和壓縮。
Development version - 用于測試和開發(未壓縮,是可讀的代碼)
jQuery 1.8.0版時壓縮前后的對比
插件機制
jQuery的官方插件是jQuery UI。開發者可以任意擴展jQuery的函數庫或者按照自己的需求開發UI組件。網上已經有數以萬計的jQuery插件,覆蓋各種各樣的需求。例如Ajax輔助、數據表格、動態列表、XML工具、拖曳、cookie處理、彈出層等等。jQuery 的文檔說明很全,而且各種應用也說得很詳細,同時還有許多成熟的插件可供選擇,例如ComponentOne Studio for ASP NET Wijmo.
隨著jQuery插件在網站建設過程中的使用率不斷的增加,所以有必要跟進時代步伐開發出一些新的插件/代碼片段,以此來鞏固并提高前端用戶體驗,將用戶體驗提升到一個新的高度。其中包括Flat jQuery Price Slider、Gmaps jQuery Map Plugin 、FormChimp——MailChimp Ajax plugin for jQuery 等。
控件
jQuery Gantt控件是一個基于原生HTML5/jQuery,功能豐富的控件,該控件真正實現了跨平臺,在許多設備和瀏覽器中無縫的運行。
使用項目甘特圖中內置的調度,依賴等功能實現任務分層列表的可視化。
使用資源甘特圖實現一個資源利用視圖。
使用基于API的jQuery或者基于API的MVC可幫您輕松地安裝甘特圖并加快應用速度。
可與諸如KnockOut(KO),jQuery.tmpl等流行的jQuery模式一同使用。
訪問jQuery官方網站(http://jquery.com),如圖1-1所示。
jQuery官方網站
在頁面上方可以看到Download jQuery按鈕,該按鈕上的v3.3.1是jQuery當前最新版本的版本號,單擊該按鈕后,進入下載頁面。
為了獲取其他版本的jQuery,在下載頁面的下半部分找到https://code.jquery.com鏈接,獲取jQuery所有版本的下載鏈接地址,如圖2所示。
圖2 獲取jQuery下載地址
單擊圖2中標示出的鏈接,進入jQuery所有版本的下載頁面,即可看到jQuery1.12.4版本的jQuery文件下載鏈接,如圖3所示。
圖3 jQuery 1.12.4壓縮版和未壓縮版
從圖l-3中可以看出,jQuery文件的類型主要包括未壓縮(uncompressed)的開發版和壓縮(minified)后的生產版。它們的區別在于,壓縮版本是將jQuery文件中的空白字符、注釋、空行等與邏輯無關的內容刪除,并進行一些優化,使得文件體積減小,加載速度比未壓端版快。而未壓縮版本的代碼可讀性更好,所以建議讀者在學習期間選擇未壓縮版本。
在項目中引入jQuery時,只需要把下載好的jQuery文件保存到項目目錄中,在項目的HTML文件中使用標簽引入即可。示例代碼如下。
<!--引入本地下載的jQuery-->
<script src="jquery-1.12.4.js"></script>
許多網站提供了靜態資源公共庫,通過CDN(內容分發網絡)可以提高jQuery的下載速度。示例代碼如下。
tml([val|fn]) 返回值:String
取得第一個匹配元素的html內容。這個函數不能用于XML文檔。但可以用于XHTML文檔。
在一個 HTML 文檔中, 我們可以使用 .html() 方法來獲取任意一個元素的內容。
如果選擇器匹配多于一個的元素,那么只有第一個匹配元素的 HTML 內容會被獲取。
function(index, html) Function
此函數返回一個HTML字符串。接受兩個參數,index為元素在集合中的索引位置,html為原先的HTML值。
返回p元素的內容。
jQuery 代碼:
$('p').html();
設置所有 p 元素的內容
jQuery 代碼:
$("p").html("Hello <b>world</b>!");
使用函數來設置所有匹配元素的內容。
jQuery 代碼:
$("p").html(function(index,n){
return "這個 p 元素的 index 是:" + n;
});
text([val|fn]) 返回值:String
val String 用于設定HTML內容的值
function(index, html) Function 此函數返回一個HTML字符串。接受兩個參數,index為元素在集合中的索引位置,html為原先的HTML值。
返回p元素的文本內容。
jQuery 代碼:
$('p').text();
設置所有 p 元素的文本內容
jQuery 代碼:
$("p").text("Hello world!");
使用函數來設置所有匹配元素的文本內容。
jQuery 代碼:
$("p").text(function(index,n){
return "這個 p 元素的 index 是:" + n;
});
$("#test").html();
意思是指:獲取ID為test的元素內的html代碼。其中html()是jQuery里的方法
這段代碼等同于用DOM實現代碼:
document.getElementById("test").innerHTML;
直接獲取、編輯內容
在jQuery中,主要是通過html()和text()兩種方法來獲取和編輯頁面內容的。其中html()相當于獲取節點的innerHTML屬性,
添加參數html(text)時,則為設置innerHTML;而text()則用來獲取元素的純文本,text(content)為設置純文本。
實例1:
jQuery代碼:
$(function(){
var sString=$("p:first").text(); //獲取純文本
$("p:last").html(sString);
});
HTML代碼:
<p><b>文本</b>段 落<em>示</em>例</p>
<p></p>
實例2:
jQuery代碼:
$(function(){
$("p").click(function(){
var sHtmlStr=$(this).html(); //獲取innerHTML
$(this).text(sHtmlStr); //將代碼做為純文本傳入
});
});
HTML代碼:
<p><b>文本</b>段 落<em>示</em>例</p>
實例3:獲取選擇框的文本
$("#id").find("option:selected").text(); //獲取Select選擇的text文本
<html>
<head>
<title>Untitled Page</title>
<script type="text/javascript" src="Scripts/jquery-1.6.2.min.js"></script>
<script type="text/javascript">
$function(){
$('#OK').bind('click', function () {
alert($("#id").find("option:selected").text());
});
}
</script>
</head>
<body>
<select id="select">
<option value="1">text1</option>
<option value="2">text2</option>
<option value="3">text3</option>
<option value="4">text4</option>
</select>
<button id="OK">
獲取為本</button>
</body>
</html>
$().html(); //獲得節點包含的信息
$().html(信息); //設置節點包含的內容
$().text(); //獲得節點包含的"文本字符串信息"內容
$().text(信息); //設置節點包含的內容(有html標簽就把"><"符號變為符號實體)
注意: DOM操作必須保住DOM節點必須存在, 當然也包括使用css樣式display:none隱藏的DOM節點, 否則會導致js語法錯誤;
*請認真填寫需求信息,我們會在24小時內與您取得聯系。