本頁使用了標題或全文手工轉換

jQuery

維基百科,自由的百科全書
跳至導覽 跳至搜尋

jQuery
JQuery logo text.svg
原作者約翰·雷西格
開發者jQuery Team
穩定版本
3.5.1
(2020年5月4日,​4個月前​(2020-05-04
原始碼庫 編輯維基數據連結
程式語言JavaScript
檔案大小
ver gzip prod dev
1.x 31kb 90.9kb 266kb
2.x 27.7kb 81.6kb 236kb
3.x 262kb
(KB)
類型網頁應用程式框架
授權條款MIT授權條款
網站jquery.com

jQuery是一套跨瀏覽器JavaScript函式庫,簡化HTML與JavaScript之間的操作。[1]約翰·雷西格John Resig)在2006年1月的BarCamp NYC上釋出第一個版本。目前由Dave Methvin領導的團隊進行開發。全球前10,000個存取最高的網站中,有65%使用了jQuery,是目前最受歡迎的JavaScript函式庫[2][3]

簡介[編輯]

jQuery是開源軟體,使用MIT授權條款授權。[4] jQuery的語法設計使得許多操作變得容易,如操作文件(document)、選擇文件物件模型DOM)元素、建立動畫效果、處理事件、以及開發Ajax程式。jQuery也提供了給開發人員在其上建立外掛程式的能力。這使開發人員可以對底層互動與動畫、進階效果和進階主題化的組件進行抽象化。模組化的方式使jQuery函式庫能夠建立功能強大的動態網頁以及網路應用程式

微軟諾基亞已宣布在他們的平台上繫結jQuery。[5]微軟最初在Visual Studio中整合了jQuery[6]以便在微軟自己的ASP.NET AJAX框架和ASP.NET MVC Framework中使用,而諾基亞則在他的Web執行時組件開發平台中整合了jQuery[7]MediaWiki自從1.16版本後也開始使用jQuery[8]

jQuery 1.3版以後,引入全新的層疊樣式表CSS)選擇器引擎Sizzle。[9] 同時不再提供Packed版本,因為解壓縮所消耗的時間,遠大於所節省的下載時間,且不利於除錯,且已有Google AJAX Libraries API等公開站台提供jQuery的js的參照服務,故Packed版本原本的優點已蕩然無存。

特色[編輯]

jQuery有下列特色:

  • 使用多瀏覽器開源選擇器引擎Sizzle(jQuery專案的衍生產品)進行DOM元素選擇[10]
  • 基於CSS選擇器的DOM操作,使用元素的名稱和屬性(如id和class)作為選擇DOM中節點的條件
  • 事件
  • 特效和動畫
  • Ajax
  • Deferred和Promise物件來控制非同步處理
  • JSON解析
  • 通過外掛程式擴充
  • 工具函式,如特徵檢測
  • 現代瀏覽器中原生的相容性方法,但對於舊版瀏覽器需要後備(fallback)方法,比如inArray()each()
  • 多瀏覽器(不要與跨瀏覽器混淆)支援

瀏覽器支援[編輯]

jQuery 3.0及以後版本支援「當前−1版本」 的FirefoxChromeSafariEdge(就是說當前穩定版本以及當前穩定版本之前的一個版本),另外還支援Internet Explorer 9以後的IE版本。在行動端支援iOS 7+和Android 4.0+。[11]

用法[編輯]

載入jQuery[編輯]

jQuery庫是包含所有公共DOM、事件、效果和Ajax函式的一個JavaScript檔案。可以通過連結到本地副本或公共伺服器提供的許多副本之一把jQuery包含在網頁中。jQuery有一個由MaxCDN代管的內容傳遞網路(CDN)。[12] Google和微軟也代管了jQuery。[13][14]

<script src="jquery.js"></script>

也可以直接從CDN中載入jQuery:

<script
  src="https://code.jquery.com/jquery-3.3.1.min.js"
  integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8="
  crossorigin="anonymous"></script>

使用風格[編輯]

jQuery有兩種使用風格:

  • 通過jQuery物件的工廠方法$函式。這些函式通常稱作命令可以連結,因為它們都返回jQuery物件。
  • 通過$.開頭的函式。這些是工具函式,它們不直接作用於jQuery物件。

在jQuery中存取和操作多個DOM節點通常從用CSS選擇器字串呼叫$函式開始。這會返回一個參照HTML頁面中所有匹配元素的jQuery物件。比如$("div.test"),會返回一個擁有class test的所有div元素的jQuery物件。可以通過呼叫返回的jQuery物件或節點本身的方法來操作這個節點集。

無衝突模式[編輯]

jQuery還有.noConflict()模式,這會釋放對$的控制。如果其他的庫也使用$作為識別碼的話,這個模式會比較有用。在無衝突模式下,開發人員可以使用jQuery替代$而不會缺失任何功能。[15]

典型的代碼開頭[編輯]

通常,jQuery是通過將初始化代碼和事件處理常式放入$(handler)中來使用的。當瀏覽器構建DOM並行送載入事件時觸發。

$(function () {
   // 这个匿名函数是页面加载时要调用的第一个函数。
   // jQuery代码,事件处理回调写在这里
});

或者

$(fn); // 在其他地方定义的名为fn的函数,是页面加载时要调用的第一个函数。

或者我們也可以使用

$(document).ready(function(){
   // 这是页面加载时要调用的第一个函数。
   // jQuery代码,事件处理回调写在这里
});

由於歷史原因,$(document).ready(callback)已經成為DOM就緒時執行代碼的實質性標誌。但jQuery 3.0以後,鼓勵開發人員使用更簡短的$(handler)標誌。[16]

對尚未載入的元素進行事件處理的回呼函式可以作為匿名函式.ready()內部註冊。這些事件處理常式只會在觸發事件時被呼叫。例如,下面的代碼添加了一個,用於在img圖像元素上單擊滑鼠事件的處理常式。

$(function () {
   $('img').on('click', function () {
      // 处理页面中任何img元素上的click事件
   });
});

連結(Chaining)[編輯]

jQuery命令通常返回一個jQuery物件,因此命令可以連結:

$('div.test')
  .add('p.quote')
  .addClass('blue')
  .slideDown('slow');

這行代碼找到了所有class屬性為testdiv標籤,以及所有class屬性為quotep標籤的並集,對於所有匹配的元素都增加一個blue的class屬性,並用一個動畫增加了它們的高度。函式$add影響匹配的元素有哪些,而addClassslideDown影響了參照的節點。

一些jQuery函式返回特定的值(例如$('#input-user-email').val())。在這些情況下,由於該值沒有參照jQuery物件,連結將不起作用。

建立新的DOM元素[編輯]

除了通過jQuery物件階層存取DOM節點外,如果作為參數傳遞給$()的字串看起來像HTML,也可以建立新的DOM元素。例如,這行代碼找到ID為carmakes的HTML select元素,並會增加一個value屬性為"VAG"、文字為"Volkswagen"的option元素:

$('select#carmakes')
  .append($('<option />')
    .attr({value:"VAG"})
    .append("Volkswagen"));

工具函式[編輯]

帶有$.字首的jQuery函式是工具函式,或者說是影響全域屬性和行為的函式。下面的例子使用了函式each()來遍歷陣列:

$.each([1,2,3], function() {
  console.log(this + 1);
});

這會將「2」,「3」,「4」寫入控制台。

Ajax[編輯]

使用$.ajax()可以執行跨瀏覽器Ajax請求。其相關方法可用於載入和處理遠端資料。

$.ajax({
  type: 'POST',
  url: '/process/submit.php',
  data: {
    name : 'John',
    location : 'Boston',
  },
}).done(function(msg) {
  alert('Data Saved: ' + msg);
}).fail(function(xmlHttpRequest, statusText, errorThrown) {
  alert(
    'Your form submission failed.\n\n'
      + 'XML Http Request: ' + JSON.stringify(xmlHttpRequest)
      + ',\nStatus Text: ' + statusText
      + ',\nError Thrown: ' + errorThrown);
});

本範例將資料name=Johnlocation=Boston釋出到伺服器上的/process/submit.php。當這個請求結束時,會呼叫success函式來提醒用戶。如果請求失敗,它會提醒用戶,告知該請求的狀態以及特定的錯誤。

非同步[編輯]

請注意,上面的例子使用$.ajax() 的延期性來處理它的非同步特性:.done().fail()建立僅在非同步過程完成時才執行的回呼。

發布版本[編輯]

JQuery目前分成1.x版、2.x版、3.x版,這三種發布版本,後兩種不再支援IE 6/7/8,前者透過jQuery Migrate plugin與先前版本保持相容。

版本號 釋出日期 最新更新 大小(KB) 備註
1.0 2006年8月26日 (2006-08-26) 第一個穩定版本
1.1 2007年1月14日 (2007-01-14)
1.2 2007年9月10日 (2007-09-10) 1.2.6 54
1.3 2009年1月14日 (2009-01-14) 1.3.2 55.9 將Sizzle選擇器引擎引入核心
1.4 2010年1月14日 (2010-01-14) 1.4.4 76
1.5 2011年1月31日 (2011-01-31) 1.5.2 83 延遲回呼管理,ajax模組重寫
1.6 2011年5月3日 (2011-05-03) 1.6.4 89 顯著改善attr()與val()的效能
1.7 2011年11月3日 (2011-11-03) 1.7.2 (2012年3月21日 (2012-03-21)) 92 新的事件API:.on()和.off(),而舊的API仍然支援。
1.8 2012年8月9日 (2012-08-09) 1.8.3 (2012年11月13日 (2012-11-13)) 91.4 重寫Sizzle選擇器引擎,改善動畫和$(html, props)的靈活性。
1.9 2013年1月15日 (2013-01-15) 1.9.1 (2013年2月4日 (2013-02-04)) 90 移除棄用介面,清理代碼
1.10 2013年5月24日 (2013-05-24) 1.10.2 (2013年7月3日 (2013-07-03)) 91 修復了1.9和2.0 beta版本周期的bug和差異
1.11 2014年1月24日 (2014-01-24) 1.11.3 (2015年4月28日 (2015-04-28)) 95.9
1.12 2016年1月8日 (2016-01-08) 1.12.4 (2016年5月20日 (2016-05-20)) 95
2.0 2013年4月18日 (2013-04-18) 2.0.3 (2013年7月3日 (2013-07-03)) 81.1 除去對IE 6-8的支援以提高效能,並降低檔案大小
2.1 2014年1月24日 (2014-01-24) 2.1.4 (2015年4月28日 (2015-04-28)) 82.4
2.2 2016年1月8日 (2016-01-08) 2.2.4 (2016年5月20日 (2016-05-20)) 85.6
3.0 2016年6月9日 (2016-06-09)[17] 3.0.0 (2016年6月9日 (2016-06-09)) 86.3 Deferred、$.ajax、$.when支援Promises/A+,令.data()相容HTML5
3.1 2016年7月7日 (2016-07-07) 3.1.1 (2016年9月23日 (2016-09-23)) 86.3 加入jQuery.readyException,ready handler錯誤現在不會不顯示了
3.2 2017年3月16日 (2017-03-16)[18] 3.2.1 (2017年3月20日 (2017-03-20)) 84.6 增加了對檢索<template>元素內容的支援,棄用了多種舊方法。
3.3 2018年1月19日 (2018-01-19) 3.3.1 (2018年1月20日 (2018-01-20)) 84.8 棄用舊函式,函式現在可以接受類,並支援其寫成陣列格式。

子專案[編輯]

以下專案均是源自於Interface外掛程式

jQuery UI[編輯]

基於jQuery的使用者介面庫,包括拖放縮放對話方塊標籤頁等多個組件。

jQuery Tools[編輯]

jQuery Tools是一個第三方的套件,基於jQuery。包括了標籤頁、表單驗證、滑鼠滾輪事件等多個組件。[19]

jQuery Mobile[編輯]

基於jQuery的手機網頁製作工具,jQuery Mobile的網站上包含了網頁的設計工具、主題設計工具。另外jQuery Mobile的js外掛程式包含了換頁、事件等的多項功能。[20]

參閱[編輯]

參考文獻[編輯]

  1. ^ / jQuery: The write less, do more, JavaScript library 請檢查|url=值 (幫助). The jQuery Project. [29 April 2010]. (原始內容存檔於2012-02-29). 
  2. ^ jQuery Usage Statistics. [2013-05-17]. (原始內容存檔於2018-12-25). 
  3. ^ Usage of JavaScript libraries for websites. W3Techs. [2010-07-08]. (原始內容存檔於2013-06-27). 
  4. ^ License – JQuery JavaScript Library. [2009-11-26]. 
  5. ^ Resig, John. jQuery, Microsoft, and Nokia. jQuery Blog. jQuery. 2008-09-28 [2009-01-29]. (原始內容存檔於2012-08-06). 
  6. ^ Guthrie, Scott. jQuery and Microsoft. ScottGu's Blog. 2008-09-28 [2009-01-29]. (原始內容存檔於2009-02-01). 
  7. ^ Guarana UI: A jQuery Based UI Library for Nokia WRT. Forum Nokia. [2010-03-30]. (原始內容存檔於2009-11-23). 
  8. ^ jQuery. MediaWiki. January 19, 2012 [March 11, 2012]. (原始內容存檔於2018-12-25). 
  9. ^ Release:jQuery 1.3. (原始內容存檔於2012-12-21) (英語). 
  10. ^ Resig, John. jQuery 1.3 and the jQuery Foundation. jQuery Blog. 2009-01-14 [2009-05-04]. 
  11. ^ Browser Support | jQuery
  12. ^ jquery.org, jQuery Foundation -. jQuery CDN. 
  13. ^ Google Libraries API - Developer's Guide. code.google.com. [March 11, 2012]. (原始內容存檔於2018-12-25). 
  14. ^ Microsoft Ajax Content Delivery Network. ASP.net. Microsoft Corporation. [June 19, 2012]. 
  15. ^ jQuery.noConflict() jQuery API Documentation. [2020-09-26]. (原始內容存檔於2014-09-14). 
  16. ^ jquery.org, jQuery Foundation -. jQuery Core 3.0 Upgrade Guide - jQuery. 
  17. ^ Chesters, James. Long-awaited jQuery 3.0 Brings Slim Build. infoq.com. 2016-06-15 [2017-01-28]. 
  18. ^ jQuery 3.2.0 Is Out!. jQuery Blog. 16 March 2017 [12 March 2018]. 
  19. ^ http://jquerytools.org 網際網路檔案館存檔,存檔日期2014-07-21.
  20. ^ 存檔副本. [2020-09-26]. (原始內容存檔於2019-10-17). 

相關書籍[編輯]

英文
中文

外部連結[編輯]