jQuery
jQuery是一套跨瀏覽器的JavaScript函式庫,用于简化HTML與JavaScript之間的操作。[2]約翰·雷西格()在2006年1月的BarCamp NYC上釋出了第一個版本。目前由Dave Methvin领导的团队进行开发。全球前10,000个访问最高的网站中,有65%使用了jQuery,是曾經最受歡迎的JavaScript函式庫[3][4]。
原作者 | 約翰·雷西格 |
---|---|
開發者 | jQuery Team |
首次发布 | 2006年8月26日 |
当前版本 | 3.7.1[1](2023年8月28日,7個月前) |
源代码库 | |
编程语言 | JavaScript |
类型 | 網頁應用程序框架 |
许可协议 | MIT许可证 |
网站 | jquery.com |
簡介
jQuery是开源软件,使用MIT许可证授权。[5] jQuery的语法设计使得许多操作变得容易,如操作(document)、选择文档对象模型()元素、创建动画效果、处理事件、以及开发Ajax程序。jQuery也提供了给开发人员在其上创建插件的能力。这使开发人员可以对底层交互与动画、高级效果和高级主题化的组件进行抽象化。模块化的方式使jQuery函数库能够创建功能强大的动态网页以及网络应用程序。
微软和诺基亚已宣布在他们的平台上绑定jQuery。[6]微软最初在Visual Studio中集成了jQuery[7]以便在微软自己的ASP.NET AJAX框架和ASP.NET MVC Framework中使用,而诺基亚则在他的Web运行时组件开发平台中集成了jQuery[8]。MediaWiki自从1.16版本后也开始使用jQuery[9]。
jQuery 1.3版以後,引入全新的層疊樣式表()选择器引擎Sizzle。[10]同時不再提供Packed版本,因為解壓縮所消耗的時間,遠大於所節省的下載時間,且不利於除錯,且已有Google AJAX Libraries API等公開站台提供jQuery的js的引用服务,故Packed版本原本的優點已蕩然無存。
特色
jQuery有下列特色:
用法
加載jQuery
jQuery库是包含所有公共DOM、事件、效果和Ajax函数的一个JavaScript文件。可以通过链接到本地副本或公共服务器提供的许多副本之一把jQuery包含在网页中。jQuery有一个由MaxCDN托管的內容傳遞網路(CDN)。[13] Google和微软也托管了jQuery。[14][15]
<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
替代$
而不会缺失任何功能。[16]
典型的代码开头
通常,jQuery是通过将初始化代码和事件处理函数放入$(handler)
中来使用的。当浏览器构建DOM并发送加载事件时触发。
$(function() {
// 这个匿名函数是页面加载完成时要调用的函数。
// jQuery代码,事件处理回调写在这里。
});
或者
$(fn); // 在其他地方定义的名为fn的函数,是页面加载完成时要调用的函数。
或者我们也可以使用
$(document).ready(function() {
// 这是页面完成加载时要调用的函数。
// jQuery代码,事件处理回调写在这里。
});
由于历史原因,$(document).ready(callback)
已经成为DOM就绪时运行代码的实质性标志。但jQuery 3.0以后,鼓励开发人员使用更简短的$(handler)
标志。[17]
对尚未加载的元素进行事件处理的回调函数可以作为匿名函数在.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.\n\n'
+ '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日 | 第一个稳定版本 | ||
1.1 | 2007年1月14日 | |||
1.2 | 2007年9月10日 | 1.2.6 | 54 | |
1.3 | 2009年1月14日 | 1.3.2 | 55.9 | 将Sizzle选择器引擎引入核心 |
1.4 | 2010年1月14日 | 1.4.4 | 76 | |
1.5 | 2011年1月31日 | 1.5.2 | 83 | 延迟回调管理,ajax模块重写 |
1.6 | 2011年5月3日 | 1.6.4 | 89 | 显著改善attr()与val()的性能 |
1.7 | 2011年11月3日 | 1.7.2 (2012年3月21日 ) | 92 | 新的事件API:.on()和.off(),而旧的API仍然支持。 |
1.8 | 2012年8月9日 | 1.8.3 (2012年11月13日 ) | 91.4 | 重写Sizzle选择器引擎,改善动画和$(html, props)的灵活性。 |
1.9 | 2013年1月15日 | 1.9.1 (2013年2月4日 ) | 90 | 移除弃用接口,清理代码 |
1.10 | 2013年5月24日 | 1.10.2 (2013年7月3日 ) | 91 | 修复了1.9和2.0 beta版本周期的bug和差异 |
1.11 | 2014年1月24日 | 1.11.3 (2015年4月28日 ) | 95.9 | |
1.12 | 2016年1月8日 | 1.12.4 (2016年5月20日 ) | 95 | |
2.0 | 2013年4月18日 | 2.0.3 (2013年7月3日 ) | 81.1 | 除去对IE 6-8的支持以提高性能,并降低文件大小 |
2.1 | 2014年1月24日 | 2.1.4 (2015年4月28日 ) | 82.4 | |
2.2 | 2016年1月8日 | 2.2.4 (2016年5月20日 ) | 85.6 | |
3.0 | 2016年6月9日[18] | 3.0.0 (2016年6月9日 ) | 86.3 | Deferred、$.ajax、$.when支持Promises/A+,令.data()兼容HTML5 |
3.1 | 2016年7月7日 | 3.1.1 (2016年9月23日 ) | 86.3 | 加入jQuery.readyException,ready handler错误现在不会不显示了 |
3.2 | 2017年3月16日[19] | 3.2.1 (2017年3月20日 ) | 84.6 | 增加了对检索<template> 元素内容的支持,弃用了多种旧方法。 |
3.3 | 2018年1月19日 | 3.3.1 (2018年1月20日 ) | 84.8 | 弃用旧函数,函数现在可以接受类,并支持其写成数组格式。 |
3.4 | 2019年4月10日[20] | 3.4.1 (2019年5月1日 )[21] | 86.1 | 改進性能,增加nonce 及nomodule ,修復radio elements 。 |
3.5 | 2020年4月10日[22] | 3.5.1 (2019年5月4日 )[23] | 87.4 | 安全性更新,以.even() 及.odd() 代替:even 及:odd ,棄用jQuery.trim 。 |
3.6 | 2021年3月2日[24] | 3.6.4 (2023年3月8日 )[25] | 88.2[26] | 错误修正,当发生JSONP错误时返回JSON,兼容新版Chrome选择器。 |
3.7 | 2023年5月11日[27] | 3.7.1 (2023年8月28日 )[28] | 85.4[29] | 添加了 .uniqueSort() 方法,性能优化,优化 .outerWidth(true) 和 .outerHeight(true) 对负边距的处理,焦点修复。 |
子项目
以下项目均是源自于Interface插件
jQuery Mobile
基於jQuery的手機網頁製作工具,jQuery Mobile的網站上包含了網頁的設計工具、主題設計工具。另外jQuery Mobile的js插件包含了換頁、事件等的多項功能。[31]
参考文献
- . 2023年8月28日.
- . The jQuery Project. [29 April 2010]. (原始内容存档于2012-02-29).
- . [2013-05-17]. (原始内容存档于2018-12-25).
- . W3Techs. [2010-07-08]. (原始内容存档于2013-06-27).
- . [2009-11-26]. (原始内容存档于2020-12-13).
- Resig, John. . jQuery Blog. jQuery. 2008-09-28 [2009-01-29]. (原始内容存档于2012-08-06).
- Guthrie, Scott. . ScottGu's Blog. 2008-09-28 [2009-01-29]. (原始内容存档于2009-02-01).
- . Forum Nokia. [2010-03-30]. (原始内容存档于2009-11-23).
- . MediaWiki. January 19, 2012 [March 11, 2012]. (原始内容存档于2018-12-25).
- . (原始内容存档于2012-12-21) (英语).
- Resig, John. . jQuery Blog. 2009-01-14 [2009-05-04]. (原始内容存档于2020-12-01).
- Browser Support | jQuery
- jquery.org, jQuery Foundation -. . [2018-05-19]. (原始内容存档于2021-02-05).
- . code.google.com. [March 11, 2012]. (原始内容存档于2018-12-25).
- . ASP.net. Microsoft Corporation. [June 19, 2012]. (原始内容存档于2020-12-17).
- . [2020-09-26]. (原始内容存档于2014-09-14).
- jquery.org, jQuery Foundation -. . [2018-05-19]. (原始内容存档于2021-01-21).
- Chesters, James. . infoq.com. 2016-06-15 [2017-01-28]. (原始内容存档于2020-11-08).
- . jQuery Blog. 16 March 2017 [12 March 2018]. (原始内容存档于2020-11-24).
- . jQuery Blog. 2018-04-10 [2019-04-15]. (原始内容存档于2021-01-15).
- . jQuery Blog. jQuery Foundation. [2020-10-21]. (原始内容存档于2020-12-01).
- . jQuery Blog. 2020-04-10 [2020-04-11]. (原始内容存档于2020-12-21).
- . jQuery Blog. jQuery Foundation. [2020-10-21]. (原始内容存档于2020-11-25).
- . jQuery Blog. 2020-04-10 [2023-10-23]. (原始内容存档于2021-03-15) (美国英语).
- . jQuery Blog. 2023-03-08 [2023-10-23]. (原始内容存档于2023-03-11) (美国英语).
- . [2023-03-08]. (原始内容存档于2023-03-08) (英语).
- . 2023-05-11 [2023-10-23]. (原始内容存档于2023-06-08) (美国英语).
- . 2023-08-28 [2023-10-23]. (原始内容存档于2023-08-31) (美国英语).
- . bundlephobia.com. [2023-10-23]. (原始内容存档于2023-07-26) (英语).
- . [2017-11-11]. (原始内容存档于2014-07-21).
- . [2020-09-26]. (原始内容存档于2019-10-17).
相關書籍
- 英文
- Learning jQuery, ISBN 1-84719-250-5
- jQuery in Action, ISBN 1-933988-35-5
- Pro JavaScript Techniques, ISBN 1-59059-727-3
- 中文
- 锋利的jQuery , ISBN 978-7-115-20701-2
- 網頁設計?愛上jQuery, ISBN 978-986-6850-84-4
- Learning jQuery中文版,ISBN 978-986-6761-60-7
- jQuery UI & Plugins, ISBN 978-986-6551-11-6
- 你不能錯過的 jQuery 指南 ISBN 9789572244173
外部連結
- jQuery官方网站(页面存档备份,存于)
- jQuery UI官方网站(页面存档备份,存于)
- jQuery - Google Code (页面存档备份,存于)(各版本JQuery的下載處)
- YouTube上的jQuery(2008年4月3日,Google Tech Talks)
- Github上的jQuery 原始碼 (页面存档备份,存于)