2006年1月14日,John Resig在纽约的BarCamp上首次介绍了名为jQuery的JavaScript库。二十年后的今天,jQuery团队正式宣布jQuery 4.0.0的最终版本发布。经过漫长的开发周期与多个预发布版本,jQuery 4.0.0带来了大量的改进和现代化特性。这是近十年来第一个主要版本更新,包含一些破坏性变更,因此在升级前请务必仔细阅读下文。尽管如此,我们预计大多数用户只需要进行少量代码修改即可完成升级。
许多破坏性变更是团队多年来一直希望实施,但无法在补丁或次要版本中完成的。我们删除了遗留代码,移除了先前已弃用的API,清理了公共函数中从未文档化的内部参数,并放弃了一些过于复杂的“魔术”行为。
团队准备了详细的升级指南,并发布了jQuery Migrate插件来协助过渡。请尝试升级,如果遇到任何问题,请向我们反馈。
与往常一样,此版本可通过我们的CDN和npm包管理器获取。其他第三方CDN可能很快也会提供支持,但请注意我们无法控制他们的发布计划,他们可能需要一些时间准备。以下是jQuery 4.0.0的更新亮点。
移除 IE<11 支持
jQuery 4.0放弃了对Internet Explorer 10及更早版本的支持。有些人可能会疑惑,为何不一同移除对IE 11的支持?我们计划分阶段移除支持,下一步计划在jQuery 5.0中实施。目前,我们首先移除了专门用于支持IE 11之前版本的代码。
我们还放弃了对其他一些非常陈旧浏览器的支持,包括Edge Legacy版本、iOS倒数第4个版本之前的版本、Firefox倒数第3个版本之前的版本(Firefox ESR除外)以及Android Browser。你无需为此进行任何代码修改。如果你的项目仍需支持这些浏览器,请坚持使用jQuery 3.x版本。
Trusted Types 和 CSP
jQuery 4.0增加了对Trusted Types的支持,确保包装在TrustedHTML对象中的HTML可以安全地作为输入传递给jQuery的DOM操作方法,而不会违反 require-trusted-types-for 内容安全策略指令。
与此同时,虽然部分AJAX请求之前已使用 <script> 标签来维护如 crossdomain 等属性,但我们现在已将大多数异步脚本请求切换为使用 <script> 标签,以避免因使用内联脚本而引发的CSP错误。仍有少数情况会使用XHR进行异步脚本请求,例如传递 "headers" 选项时(建议改用 scriptAttrs 选项),但我们会尽可能优先使用 <script> 标签。
jQuery 源代码迁移到 ES 模块
将jQuery源代码从AMD迁移到ES模块是一个重要的里程碑。jQuery的源代码一直随着发布版本在npm和GitHub上提供,但除非使用RequireJS(jQuery过去选择的构建工具),否则无法直接作为模块导入。现在,我们已切换到Rollup来打包jQuery,并且所有测试都在纯ES模块环境下运行。这使得jQuery能够更好地兼容现代构建工具、开发工作流以及浏览器(通过使用 <script type=module>)。
移除已弃用的 API
以下函数已在多个版本中被标记为弃用。现在到了主要版本更新的时候,是时候彻底移除它们了。这些函数要么最初就是为内部使用而设计,要么在所有支持的浏览器中都已有了功能等效的原生方法。被移除的函数包括:
jQuery.isArray、jQuery.parseJSON、jQuery.trim、jQuery.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的支持代码,使得jQuery库在gzip压缩后的大小减少了超过3KB。
从 jQuery 原型中移除仅内部方法
jQuery原型长期以来包含一些行为与其他jQuery方法不一致的数组方法,它们一直是为内部使用而设计的。这些方法是 push、sort 和 splice。现在它们已从jQuery原型中移除。如果你在使用这些方法,例如 $elems.push( elem ),可以将其替换为 [].push.call( $elems, elem )。
长期以来,浏览器在 focusin、focusout、focus 和 blur 事件的触发顺序上未能达成一致。最终,jQuery 4.0支持的所有浏览器的最新版本在事件顺序上形成了共识。遗憾的是,这个共识与jQuery多年前选择的顺序不同,因此这成为了一个破坏性变更。不过,现在至少所有浏览器都统一了!
从jQuery 4.0开始,我们不再覆盖浏览器的原生行为。这意味着除IE外的所有浏览器都将遵循当前的W3C规范,事件顺序为:
- blur
- focusout
- focus
- focusin
而jQuery在之前版本中的顺序是:focusout、blur、focusin、focus。颇具讽刺意味的是,唯一曾遵循旧版W3C规范(2023年更新前)的浏览器正是Internet Explorer。
更新 slim 构建
在jQuery 4.0.0中,slim构建变得更小了,我们移除了Deferreds和Callbacks模块(现在gzip压缩后大约只有19.5KB!)。Deferreds长期以来都支持Promises A+标准,因此在大多数情况下可以使用原生Promises替代。原生Promises在jQuery支持的所有浏览器中均可使用(除了IE 11)。尽管Deferreds有一些原生Promises不支持的功能,但大多数使用场景都可以迁移到Promise方法。如果你需要支持IE 11,建议使用完整版构建,或为IE 11添加原生Promise的polyfill。
下载
你可以从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
Slim 构建
有时你可能不需要ajax功能,或者更倾向于使用专注于ajax请求的众多独立库之一。通常,结合使用CSS和类操作来处理Web动画会更加简单。最后,jQuery支持的所有浏览器(除了IE 11)现在都已全面支持原生Promises,因此在大多数场景下不再需要Deferreds和Callbacks。除了包含所有功能的常规版本,我们还发布了排除这些模块的“slim”版本。如今jQuery的大小很少成为加载性能的瓶颈,但slim构建的gzip压缩体积比常规版本小了约8KB。这些文件同样在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上的文件,直到其他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、Pat O’Callaghan、Christian Oliff、Dimitri Papadopoulos Orfanos、Wonhyoung Park、Bruno PIERRE、Baoshuo Ren、Beatriz Rezener、Sean Robinson、Ed Sanders、Timo Tijhof、Tom、Christian Wenz、ygj6 以及整个jQuery团队。
jQuery 20 岁生日快乐!
在过去的二十年里,许多杰出的人才为jQuery及其相关项目做出了贡献。我们许多人在达拉斯重聚合影,John Resig甚至通过Zoom远程加入。这个具有里程碑意义的版本正是在我们所有人欢聚一堂时发布的。
对于关注此类前端生态重大更新的开发者,欢迎到云栈社区的相关板块进行更深入的交流与探讨。
原文:https://blog.jquery.com/2026/01/17/jquery-4-0-0/