2006年1月14日,John Resig 在纽约市的 BarCamp 推出了名为 jQuery 的 JavaScript 库。如今,20年过去了,jQuery 团队很高兴地宣布 jQuery 4.0.0 的最终发布。经过漫长的开发周期和多次预发布,jQuery 4.0.0 带来了许多改进和现代化。这是近十年来的首个主要版本发布,包含一些破坏性变更,升级前请务必阅读以下细节。不过,我们预计大多数用户只需对代码进行最小修改即可升级。
许多破坏性的改动是团队多年来一直想做但无法通过补丁或小型版本实现的。我们删减了遗留代码,移除了一些之前弃用的API,移除了一些从未文档化的仅内部参数的公开函数,并放弃了对一些过于复杂的“神奇”行为的支持。
该版本可在我们的CDN(https://jquery.com/download/)和npm包管理器中获取。其他第三方CDN可能很快也会上线。以下是jQuery 4.0.0的亮点。
jQuery 4.0 不再支持 IE 10 及更早版本。有人可能会问为什么我们没有取消对IE 11的支持。我们计划分阶段移除支持,下一步将在 jQuery 5.0 中发布。目前,我们先从移除专门支持11以上IE版本的代码开始。
我们还停止支持其他非常老旧的浏览器,包括Edge Legacy、iOS版本(早于前三代)、Firefox版本(除Firefox ESR)之外,以及Android浏览器。你这边不需要做任何更改。如果你需要支持这些浏览器中的任意一个,建议继续使用 jQuery 3.x。
jQuery 4.0 增加了对可信类型的支持,确保用 TrustedHTML 包裹的 HTML 可以作为 jQuery作方法的输入,且不违反内容安全策略指令。require-trusted-types-for
与此同时,虽然部分AJAX请求已使用标签来维护诸如属性,但我们已将大多数异步脚本请求改为使用<script>标签,以避免使用内联脚本引发的CSP错误。仍有少数情况下,XHR会用于异步脚本请求,比如选项被传递时(请使用!),但我们现在尽可能使用标签。<script> crossdomain "headers" scriptAttrs <script>
那天是个特别的日子,分支上的jQuery源代码从AMD迁移到了ES模块。jQuery 源代码一直与 npm 和 GitHub 上的 jQuery 发布一起发布,但如果没有 RequireJS,无法直接导入模块,而 RequireJS 是 jQuery 首选的构建工具。后来我们已经切换到 Rollup 来打包 jQuery,并且所有测试都会分别在 ES 模块上运行。这使得jQuery通过使用现代构建工具、开发工作流和浏览器兼容。main <script type=module>
这些函数在多个版本中已被弃用。既然我们已经迎来了重大发布,现在是时候移除它们了。这些功能要么一直设计为内部功能,要么现在所有支持的浏览器都有原生对应功能。被移除的功能包括:jQuery.isArray,jQuery.parseJSON jQuery.trimjQuery.type jQuery.now jQuery.isNumeric jQuery.isFunction jQuery.isWindow jQuery.camelCase jQuery.nodeName jQuery.cssNumber jQuery.cssProps jQuery.fx.interval
使用原生的对应词,如Array.isArray() JSON.parse() String.prototype.trim() Date.now()
移除弃用的 API 以及支持旧 IE 的代码,导致 gzip 超过 3000 字节的体积减少。
jQuery 原型长期以来就有数组方法,这些方法的行为与其他 jQuery 方法不同,始终仅供内部使用。这些方法是 ,, 和. 它们现已被从 jQuery 原型中移除。如果你使用了这些方法,可以用 替换为 。push sort splice $elems.push( elem ) [].push.call( $elems, elem )
很长一段时间,浏览器对焦点和模糊事件的顺序(包括聚焦、聚焦结束、聚焦和模糊)都没有达成一致。最后,jQuery 4.0 支持的所有最新版本浏览器都趋同于共同事件顺序。不幸的是,它与多年前jQuery选择的一致顺序不同,这使得这次变更成为一个突破性的。至少现在大家都达成了共识!
从 jQuery 4.0 开始,我们不再覆盖原生行为。这意味着除IE外,所有浏览器都将遵循当前的W3C规范,即:
模糊
聚焦
焦点
聚焦
jQuery 在之前版本中的顺序是:聚焦、模糊、聚焦、聚焦。具有讽刺意味的是,唯一遵循旧W3C规范(2023年更新前)的浏览器是Internet Explorer。
在jQuery 4.0.0中,随着延迟和回调的移除(现在大约19.5万字节被压缩),这个纤薄版本变得更加精简。Deferreds 长期支持 Promises A+ 标准,因此大多数情况下可以使用原生 Promise,并且在 jQuery 支持的所有浏览器中均可用,除了 IE11。延迟方法确实有一些原生 Promises 不支持的额外功能,但大多数使用方式可以迁移到 Promise 方法。如果你需要支持 IE11,最好用主版本,或者为原生 Promise 添加一个多重填充。
你可以从 jQuery CDN 获取文件,或者直接链接到它们:
https://code.jquery.com/jquery-4.0.0.js
https://code.jquery.com/jquery-4.0.0.min.js
你也可以从npm获得以下内容:npm install jquery@4.0.0
有时候你不需要 Ajax,或者你更喜欢用那些专注于 ajax 请求的独立库。而且通常,结合CSS和类作来制作网页动画更简单。最后,除了 IE11 外,所有 jQuery 支持的浏览器现在都支持原生 Promise,因此大多数情况下不再需要延迟和回调。除了包含所有功能的常规jQuery版本外,我们还发布了一个“精简”版本,不含这些模块。jQuery 的体积如今很少成为加载性能问题,但这个 slim 版本比普通版本小了大约 8k gzip 字节。这些文件也可在 npm 包和 CDN 中获得:
https://code.jquery.com/jquery-4.0.0.slim.js
https://code.jquery.com/jquery-4.0.0.slim.min.js
这些更新已经以当前版本的形式在 npm 和 Bower 上提供。关于获取jQuery的所有方式,请访问 https://jquery.com/download/ 。公共CDN今天收到副本,请给他们几天时间发布文件。如果你急于快速开始,可以先使用我们的CDN文件,直到它们有机会更新。
感谢所有参与本次发布、提交补丁、报告漏洞或测试的朋友们,包括Alex、Ahmed S. El-Afifi、fecore1、Dallas Fraser、Richard Gibson、Michał Gołębiowski-Owczarek、Pierre Grimaud、Gabriela Gutierrez、Jonathan、Necmettin Karakaya、Anders Kaseorg、Wonseop Kim、Simon Legner、Shashanka Nataraj帕特·奥卡拉汉、克里斯蒂安·奥利夫、迪米特里·帕帕多普洛斯·奥尔法诺斯、朴元英、布鲁诺·皮埃尔、宝秀仁任、贝阿特丽斯·雷泽纳、肖恩·鲁宾逊、埃德·桑德斯、蒂莫·蒂霍夫、汤姆、克里斯蒂安·温兹、ygj6以及整个jQuery团队。
过去20年里,许多优秀的人为jQuery及其相关项目做出了贡献,我们中的许多人也曾在达拉斯聚会。John Resig 甚至通过 Zoom 加入了。这份新闻稿是在我们大家一起发布的。
