jQuery 是一套跨 瀏覽器 JavaScript 函式庫 ,简化 HTML 與JavaScript之間的操作。由 約翰·雷西格 John Resig )在2006年1月的BarCamp NYC上釋出第一個版本。目前是由Dave Methvin领导的开发团队进行开发。全球前10,000个访问最高的网站中,有65%使用了jQuery,是目前最受歡迎的JavaScript函式庫 [2] [3]

jQuery是一个跨平台的JavaScript库,旨在简化HTML的客户端脚本。[3]它是使用许可的MIT许可证的免费开源软件。[2] Web分析表明它是最广泛部署的JavaScript库。[4] [5]

jQuery的语法旨在使导航文档,选择DOM元素,创建动画,处理事件和开发Ajax应用程序变得更加容易。 jQuery还为开发人员提供了在JavaScript库之上创建插件的功能。这使开发人员能够为低级交互和动画,高级效果和高级,可主题的小部件创建抽象。 jQuery库的模块化方法允许创建功能强大的动态Web页面和Web应用程序。

jQuery核心功能集 - DOM元素选择,遍历和操作 - 由其选择器引擎(从v1.3命名为“Sizzle”)启用,创建了一种新的“编程风格”,融合了算法和DOM数据结构。这种风格影响了其他JavaScript框架的体系结构,如YUI v3和Dojo,后来刺激了标准Selectors API的创建。[6]

微软和诺基亚在他们的平台上捆绑了jQuery。[7] Microsoft将其与Visual Studio [8]一起包含在Microsoft的ASP.NET AJAX和ASP.NET MVC框架中,而诺基亚已将其集成到Web Run-Time小部件开发平台中。[9]

簡介

jQuery是 开源软件 ,使用 MIT许可证 授权。 [4] jQuery的语法设计使得许多操作变得容易,如操作文档对象(document)、选择 文档对象模型 DOM )元素、创建 动画 效果、处理事件、以及开发 Ajax 程序。jQuery也提供了给开发人员在其上创建 插件 的能力。这使开发人员可以对底层交互与动画、高级效果和高级主题化的组件进行抽象化。模块化的方式使jQuery函数库能够创建功能强大的 动态网页 以及 网络应用程序

微软 诺基亚 已宣布在他们的平台上绑定jQuery。 [2] 微软最初在 Visual Studio 中集成了jQuery [6] 以便在微软自己的 ASP.NET AJAX 框架和 ASP.NET MVC Framework 中使用,而诺基亚则在他的Web运行时组件开发平台中集成了jQuery [8] MediaWiki 自从1.16版本后也开始使用jQuery。

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版本” 的 Firefox Chrome Safari Edge (就是说当前稳定版本以及当前稳定版本之前的一个版本),另外还支持 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属性为 test div 标签,以及所有class属性为 quote p 标签的并集,对于所有匹配的元素都增加一个 blue 的class属性,并用一个动画增加了它们的高度。函数 $ add 影响匹配的元素有哪些,而 addClass slideDown 影响了引用的节点。

一些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.nn'      + 'XML Http Request: ' + JSON.stringify(xmlHttpRequest)      + ',nStatus Text: ' + statusText      + ',nError Thrown: ' + errorThrown);});

本示例将数据 name=John location=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插件包含了換頁、事件等的多項功能。 [2]

参阅