JavaScript开发框架-jQuery
2010-10-17 10:46:44 阿炯

jQuery是一款开放源代码的JavaScript代码库,由John Resig创建。授权协议为GPLMIT许可证双协议。


jQuery is a new kind of JavaScript Library.

jQuery is a fast and concise JavaScript Library that simplifies HTML document traversing, event handling, animating, and Ajax interactions for rapid web development. jQuery is designed to change the way that you write JavaScript.

* Lightweight Footprint
About 24KB in size (Minified and Gzipped)

* CSS3 Compliant
Supports CSS 1-3 selectors and more!

* Cross-browser
IE 6.0+, FF 2+, Safari 3.0+, Opera 9.0+, Chrome



另有官方 UI 组件库-jQuery UI


许可协议由GPL变更为MIT

在2010年10月中旬发布jQuery项目(包括core、UI、Mobile、Sizzle和QUnit)中,包含了诸多重要的新特性。另外这些开源项目的许可协议也得到了变更。

jQuery开发团队移除了GNU General Public License (GPL)许可证,只保留了MIT许可证。之前使用的是双许可证形式。该团队称,只使用一个许可证,可以使jQuery基金会的管理变得简单,并不会影响开发者继续使用任何的项目。开发者仍可以免费获得一个jQuery基金会项目,进行修改,如果情况允许,仍可以重新基于GPL进行授权。该团队表示,MIT许可证是一个“宽松的、non-copyleft的自由软件许可证,与GNU GPL兼容”。

开发团队还称,除非你是一名律师,否则这些变化对于你来说和之前没有什么区别,但这对于jQuery基金会非常重要。另外对于jQuery项目的贡献者,需要签署一个贡献者授权协议(CLA),jQuery团队成员则需要签署一个版权转让协议(CAA)。

最新版本:2.0
将不支持 IE 6/7/8 浏览器,因此该版本更小、更快。但别担心,jQuery 团队将继续对 1.x 版本分支进行维护。

最新版本:3.0
jQuery 3.0将是jQuery的未来。但如果你需要IE6-8支持,您可以继续使用最新版本1.12。为了帮助用户升级,jQuery 发布了全新的3.0升级指南,以及 jQuery Migrate 3.0 插件将帮助您识别代码中的兼容性问题。

最新版本:3.5
jQuery 3.5.1 已发布,此版本修复了针对 3.5.0 的回归错误。具体来说就是,在此前的版本中将内部数据对象改为使用Object.create( null )而非普通对象 ({})。之所以这样做是为了防止与 Object.prototype 属性上的 key 发生冲突。然而,这也意味着用户(尤其是插件)无法再使用原生的 .hasOwnProperty 方法来检查 jQuery 数据中的内容,导致破坏部分代码。目前已恢复了这个改动,但官方计划在 jQuery 4.0 中再放回去。这个改动也是此版本中唯一的代码改动,其他的改动包括对文档和构建系统的一些小更新。上个版本 jQuery 3.5.0 修复了 jQuery DOM 操作方法中出现的两个安全问题,例如.html(), .append()以及其他的 DOM 操作方法。第一个问题已在 jQuery 3.5.0 发布公告中解释过,现在解释一下第二个安全问题。

第二个问题与第一个问题非常相似,这是一个 XSS 漏洞,与传递<option>元素到 jQuery 的 DOM 操作方法有关。本质上,这是使用了一个正则表达式来包裹<option>元素与<select>元素,以确保这些元素在旧版本 IE 中得到正确解析。目前的解决方法是只在需要的地方应用这些代码。幸运的是,由于 IE9 中的解析行为不同,因此可以在 IE9 中保留这个安全修复,而不会暴露在其他浏览器的漏洞中。更多详情可查看主页上的发行公告。

最新版本:3.6
jQuery 3.6.0 已于2021年3月初正式发布,此版本不包含安全修复程序,但具有一些错误修复和改进。以下是 jQuery 3.6.0 的更新亮点:
即使存在 JSONP 错误也返回 JSON,在以前的版本中,当 JSONP 请求返回错误时,返回通常仍是一个可执行脚本。3.6.0 版本已经更改了默认行为,以尝试在这种情况下执行脚本。当遇到错误时,正常的脚本仍将被跳过。

修正:一个值得强调的 bug 是关于将焦点重定向到焦点处理程序中的另一个元素。以这个例子为例,一个焦点处理程序在另一个焦点处理程序中被触发。
elem1.on("focus",function(){
  elem2.trigger("focus");
});

由于它们在 IE 之外的所有地方都具有同步特性,因此在 3.4.0 中添加了一个利用本地事件的修复程序,导致该本地.focus()方法在初始元素中被最后调用,从而使其失去了焦点。尽管代码继续利用本机焦点和模糊事件,但我们能够通过与本机方法进行更多的匹配并仅将最后一个焦点事件传播到 DOM tree 中来解决此问题。其他错误修复和改进包括:修复了在 Firefox 中检索表格行的维度;修复了在已删除元素上触发焦点事件时,Chrome崩溃的问题;对某些测试进行了多项改进等。下面是完整的变更日志:
Ajax:执行 JSONP 错误脚本响应
Core:在 parseXML 报告浏览器错误,恢复对 jQuery 3.x 的 QtWebKit 支持
Deferred:将 master 重命名为 primary
Dimensions:修改 reliableTrDimensions 支持测试,以考虑到 FF
Docs:将 JS Foundation 提及的内容更改为 OpenJS Foundation
Event:使焦点重新触发而不是将原来的元素聚焦回来;如果一个元素在模糊时被移除,不会崩溃
Selector:将 Sizzle 从 2.3.5 更新到 2.3.6
Support:确保支持 div 的 display 设置为block

Tests
修正没有数据类型的脚本不自动执行的测试
跳过 Legacy Edge 中的 jQuery.parseXML 错误报告测试
修正 jQuery.parseXML 错误报告测试
在 Node.js mock 服务器中识别带点的回调
跳过 Safari 中的 "jQuery.ajax() on unload"测试
删除一个未使用的局部变量
删除剩余的过时 jQuery.cache 引用
删除过时的 jQuery 数据测试

更多详情可查看此处

最新版本:3.7
3.7.0 已正式于2023年5月中旬发布。更新内容包括修复错误、引入新方法,以及提升性能。其中值得关注的一项变化是放弃了长期使用的选择器引擎 Sizzle —— jQuery 不再依赖于作为单独项目的 Sizzle。开发者表示他已经将 Sizzle 移动至 jQuery 内部,将其代码直接放到 jQuery 核心。据称这有助于为未来 jQuery 版本中选择器的重要变化做好准备。虽然现在意义不大,但 jQuery 体积减少了几个字节。因为 Sizzle 支持比 jQuery 更旧的浏览器。

提升操作性能方面,jQuery 3.7.0 在使用 .append() 等操作方法时,对某些用例带来了可衡量的性能改进。开发者称,当删除不再支持的浏览器的测试支持时,这意味着不再需要运行针对文档更改的检查。从本质上讲,这带来了 0% 到 100% 之间的任何加速。最显着的加速将出现在一些罕见的情况下,在这些情况下,用户经常在不同文档之间切换上下文,可能是通过跨多个 iframe 运行操作。其他主要变化:添加新方法.uniqueSort()、新增一些 unitless CSS 属性、在 IE 中使用不同的原生焦点事件。更多详情查看发行公告

4.0 beta 现已于2024年2月中旬发布,进行了一些错误修复、性能改进和一些破坏性变更。发行公告指出,其中很多突破性变更都是团队多年来一直想做的,但却无法在补丁或小版本中实现的。新版本删减了遗留代码,移除了一些以前已经弃用的 API,移除了一些从未记录在案的 public functions 的 internal-only 参数,并放弃了对一些过于复杂的 "magic" 行为的支持。一些更新内容包括:
不再支持 IE 10 及更早版本。按照分阶段取消支持计划,预计下一步将在 jQuery 5.0 中取消对 IE 11 的支持。同时还放弃了对其他旧版浏览器的支持,包括 Edge Legacy、iOS <11、Firefox <65 和 Android 浏览器。对于还有需要的用户,则可以选择继续坚持使用 jQuery 3.x。删除了已弃用的 API
jQuery.cssNumber,cssProps,isArray,parseJSON,nodeName,isFunction,isWindow,camelCase,type,now,isNumeric,trim,fx.interval

删除了 push, sort 以及 splice
jQuery 原型中的 Array 方法 push, sort 以及 splice 已经被删除。这些方法的行为与任何其他 jQuery 方法不同,并且始终是 internal-use only。目前,这些方法已转换为等效的 Array 函数。例如,$elems.push( elem ) 变成了 [].push.call( $elems, elem )。

focusin 和focosout event order
长期以来,浏览器对 focus 和 blur 事件的顺序(包括 focusin、focusout、focus 和 blur)并不一致。jQuery 4.0 支持的所有浏览器的最新版本都趋向于统一事件顺序。但是它与 jQuery 多年前选择的一致顺序不同,所以促使这一改变变成了一个破坏性的变更。在以前的版本中对所有四个事件的顺序是:
1.focusout
2.blur
3.focusin
4.focus

从 jQuery 4.0 开始,不再 override native behavi;这意味着除 IE 之外的所有浏览器都将遵循当前的 W3C 规范。

FormData 支持:jQuery.ajax 添加了对二进制数据的支持,包括 FormData。

此外,v4.0 还删除了自动 JSONP 升级、将 jQuery source 迁移至 ES 模块;以及添加了对 Trusted Types 的支持,确保以 TrustedHTML 封装的 HTML 能以不违反 require-trusted-types-for 内容安全策略指令的方式用作 jQuery 操作方法的输入。由于删除了 Deferreds 和 Callbacks(现在压缩后不到 20k 字节),v4.0.0 的 slim build 变得更加小巧。

最新版本:4.0
2024年8月发布的v4.0.0无疑是一次重磅升级,以下是一些主要的新特性和改进:
更新 GitHub Actions 组件:
1.将 github-actions 组件更新到两个新版本
更新 actions/cache、actions/checkout 和 github/codeql-action 组件
将 github/codeql-action 组件更新到新版本
将 actions/cache 组件更新到新版本

2.依赖项和配置改进:
将 express 依赖从 4.18.3 升级到 4.19.2
提高 eslint 配置的特定性,添加 ECMAScript 版本
使比较文件大小的缓存更可读,修复在分支状态不干净时比较小文件大小的问题
迁移更多代码以使用 fs.promises
使用 node: 协议更新

3.GitHub Actions 优化:
将 Dependabot 的 PRs 分组
添加 GitHub Actions 工作流来更新 Filestash

4.其他更新:
更新 Jenkins 脚本,仅进行构建
放弃对 Node.js 10 的支持

5.v4.0.0的优劣势
优势
依旧简洁易用:jQuery的简洁性和易用性依旧是其最大的优势,开发者可以快速上手,极大地提高开发效率。
性能优化:新版本在性能上有了显著提升,无论是加载速度还是DOM操作效率,都更加出色。
模块化设计:按需加载模块使得项目更加轻量级,减少了不必要的资源加载。
现代浏览器支持:专注于现代浏览器,使得代码更加简洁高效。一些小型工具和插件其依旧是一个不错的选择。

劣势
市场份额下降:随着React、Vue.js和Angular等现代框架的流行,jQuery的市场份额已经大幅下降。
学习曲线:对于新一代前端开发者来说,学习jQuery可能显得有些过时,现代框架提供了更完整的解决方案。
过时的编程范式:相比于React等框架的组件化开发模式,jQuery的编程范式显得有些老旧。


主版本演进

在畅谈jQuery 4.0.0之前先回顾一下jQuery的经典版本:
jQuery 1.x:作为初代版本,jQuery 1.x奠定了其在前端开发中的重要地位。简化了DOM操作、事件处理和Ajax请求,让开发者得以轻松应对跨浏览器兼容性问题。

jQuery 2.x:这个版本主要是为了抛弃对IE 6/7/8的支持,进一步优化了代码结构和性能。

jQuery 3.x:引入了更多现代化的JavaScript特性,提升了性能和代码简洁性,并增加了对Promise和ES6的支持。

jQuery 4.0:最新版本,主要侧重于性能优化、模块化设计和现代浏览器支持。


官方主页:http://jquery.com/

------------------------------
jQuery实现在线预览PDF文件

Web实现在线预览PDF文件,可通过jquery.media实现,首先引入jQuery和jQuery.media库即可实现pdf文档在线预览。

项目主页:http://jqueryui.com/

该文章最后由 阿炯 于 2024-08-18 19:33:14 更新,目前是第 6 版。