jQuery 4.0.0

发布于 作者

2006年1月14日,John Resig 在纽约市的 BarCamp 上推出了一款名为 jQuery 的 JavaScript 库。现在,20年后,jQuery 团队很高兴地宣布 jQuery 4.0.0 的最终版本。经过漫长的开发周期和几个预发布版本,jQuery 4.0.0 带来了许多改进和现代化。这是近10年来首次发布的主要版本,包含了一些破坏性更改,因此请务必在升级之前仔细阅读以下详细信息。尽管如此,我们预计大多数用户都可以通过对代码进行最少的更改来升级。

许多破坏性更改是团队多年来一直希望进行的,但无法在补丁或次要版本中进行。我们精简了遗留代码,删除了之前已弃用的 API,删除了公共函数中从未记录的一些仅限内部使用的参数,并放弃了对一些过于复杂的“魔法”行为的支持。

我们准备了 升级指南jQuery Migrate 插件发布 来协助过渡。请升级并 告知我们您是否遇到任何问题

像往常一样,该版本可在 我们的 CDN 和 npm 包管理器上获得。其他第三方 CDN 可能也会很快提供它,但请记住,我们无法控制他们的发布计划,他们需要一些时间。以下是 jQuery 4.0.0 的亮点。

移除对 IE<11 的支持

jQuery 4.0 停止支持 IE 10 及更早版本。有些人可能会问为什么我们没有移除对 IE 11 的支持。我们计划分阶段移除支持,下一步 将在 jQuery 5.0 中发布。现在,我们将从移除专门支持 IE 11 之前版本的代码开始。

我们还放弃了对其他非常旧浏览器的支持,包括 Edge Legacy、iOS 早期版本(最后 3 个版本之前)、Firefox 早期版本(Firefox ESR 除外)和 Android Browser。您无需进行任何更改。如果您需要支持任何这些浏览器,请坚持使用 jQuery 3.x。

Trusted Types 和 CSP

jQuery 4.0 添加了对 Trusted Types 的支持,确保包装在 TrustedHTML 中的 HTML 可以用作 jQuery 操作方法输入的输入,而不会违反 require-trusted-types-for 内容安全策略指令。

与此同时,虽然一些 AJAX 请求已经使用 <script> 标签来维护诸如 crossdomain 之类的属性,但我们已经 将大多数异步脚本请求切换为使用 <script> 标签,以避免因使用内联脚本而导致的任何 CSP 错误。仍然存在一些使用 XHR 进行异步脚本请求的情况,例如当传递 "headers" 选项时(请改用 scriptAttrs!),但我们现在尽可能使用 <script> 标签。

jQuery 源代码迁移到 ES 模块

当 jQuery 源代码在 main 分支上从 AMD 迁移到 ES 模块 时,那是一个特殊的日子。jQuery 源代码一直与 jQuery 发布版一起在 npm 和 GitHub 上发布,但无法直接作为模块导入,除非使用 RequireJS,这是 jQuery 选择的构建工具。此后,我们已切换到 Rollup 来打包 jQuery,并且我们单独运行所有 ES 模块上的测试。这使得 jQuery 与现代构建工具、开发工作流程和浏览器兼容,通过使用 <script type=module>

已弃用的 API 已移除

这些函数已经弃用了很多版本。现在我们已经发布了主要版本,是时候移除它们了。这些函数要么一直打算用于内部,要么现在在所有支持的浏览器中都有原生等效项。移除的函数包括

jQuery.isArrayjQuery.parseJSONjQuery.trimjQuery.typejQuery.nowjQuery.isNumericjQuery.isFunctionjQuery.isWindowjQuery.camelCasejQuery.nodeNamejQuery.cssNumberjQuery.cssPropsjQuery.fx.interval

请改用原生等效项,例如 Array.isArray()JSON.parse()String.prototype.trim()Date.now()

移除已弃用的 API 与移除对旧 IE 的支持代码相结合,gzip 压缩后的大小减少了 3k 字节以上。

从 jQuery 原型中移除仅限内部使用的函数

jQuery 原型长期以来一直存在着行为与任何其他 jQuery 函数不同的数组方法,并且一直仅用于内部使用。这些方法是 pushsortsplice。现在它们已从 jQuery 原型中移除。如果您正在使用这些方法,$elems.push( elem ) 可以替换为 [].push.call( $elems, elem )

焦点事件顺序现在遵循 W3C 规范

长期以来,浏览器对于焦点和模糊事件的顺序存在分歧,包括 focusin、focusout、focus 和 blur。最终,所有 jQuery 4.0 支持的浏览器的最新版本都已收敛到通用的事件顺序。不幸的是,它与 jQuery 多年来选择的一致顺序不同,这使得它成为一个破坏性更改。至少现在每个人都在同一页面上了!

从 jQuery 4.0 开始,我们不再覆盖原生行为。这意味着除了 IE 之外的所有浏览器都将遵循当前的 W3C 规范,即

  1. blur
  2. focusout
  3. focus
  4. focusin

jQuery 在早期版本中的顺序是:focusout、blur、focusin、focus。具有讽刺意味的是,唯一曾经遵循旧 W3C 规范(在 2023 年更新之前)的浏览器是 Internet Explorer。

更新精简版构建

jQuery 4.0.0 中移除了 Deferreds 和 Callbacks,精简版构建变得更小(现在约为 19.5k 字节 gzip 压缩!)。Deferreds 长期以来支持 Promises A+ 标准,因此在大多数情况下可以使用原生 Promises 代替,并且它们在 jQuery 的所有支持的浏览器中都可用,除了 IE11。Deferreds 具有一些原生 Promises 不支持的额外功能,但大多数用法可以迁移到 Promise 方法。如果您需要支持 IE11,最好使用主构建或为原生 Promises 添加一个 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

精简版

有时您不需要 ajax,或者更喜欢使用许多独立的专注于 ajax 请求的库。而且,通常使用 CSS 和类操作进行 Web 动画更简单。最后,所有 jQuery 支持的浏览器(IE11 除外)现在都支持本机 Promises,因此在大多数情况下不再需要 Deferreds 和 Callbacks。除了包含所有内容的常规 jQuery 版本之外,我们还发布了一个排除这些模块的“精简”版本。这些天 jQuery 的大小很少成为加载性能问题,但精简版本比常规版本小约 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://jqueryjs.cn/download/。公共 CDN 今天会收到其副本,请给它们几天时间来发布文件。如果您急于开始,请使用我们 CDN 上的文件,直到它们有机会更新为止。

感谢

感谢所有参与本次发布的人员,包括提交补丁、报告错误或测试的人员,例如 ac-mmi, Alex, Ulises Gascón, Richard Gibson, Michał Gołębiowski-Owczarek, Gabriela Gutierrez, J.Son, Liam James, Anders Kaseorg, Simon Legner, neogy-akash, Christian Oliff, Dimitri Papadopoulos Orfanos, Bruno PIERRE, Baoshuo Ren, studystill, Timo Tijhof,以及整个 jQuery 团队。

祝 jQuery 20 岁生日快乐!

在过去的 20 年里,有许多出色的个人为 jQuery 及其相关项目做出了贡献,我们中的许多人聚集在达拉斯参加了一次重聚。John Resig 甚至通过视频加入了我们。这个版本在我们所有人聚集在一起时发布的。

变更日志

完整变更日志:4.0.0

Ajax

  • 不要将数组数据视为二进制数据 (992a1911)
  • 即使对于二进制数据,也允许 processData: true (ce264e07)
  • 支持二进制数据(包括 FormData)(a7ed9a7b)
  • 即使在跨域的情况下,也支持 headers 用于脚本传输 (#5142, 6d136443)
  • 支持 jQuery.get 中的 null 作为成功函数 (#4989, 74978b7e)
  • 除非提供了 dataType,否则不要自动执行脚本 (#4822, 025da4dd)
  • 使 responseJSON 适用于错误的同域 JSONP 请求 (68b4ec59)
  • 执行 JSONP 错误脚本响应 (#4771, a1e619b0)
  • 避免异步请求的脚本传输中的 CSP 错误 (#3969, 07a8e4a1)
  • 放弃 json 到 jsonp 的自动提升逻辑 (#1799, #3376, e7b3bc48)
  • 如果存在 content-type 标头值,则覆盖 s.contentType (#4119, 7fb90a6b)
  • 弃用 AJAX 事件别名,将内联别名弃用 (23d53928)
  • 不要为不成功的 HTTP 响应执行脚本 (#4250, 50871a5a)
  • 简化 jQuery.ajaxSettings.xhr (#1967, abdc89ac)

属性

  • 使 .attr( name, false ) 移除所有非 ARIA 属性 (#5388, 063831b6)
  • 减少几个字节 (b40a4807)
  • 不要在 setter 中将属性字符串化 (#4948, 4250b628)
  • 移除 toggleClass(boolean|undefined) 签名 (#3388, a4421101)
  • 重构 val():不要剥离回车符,隔离 IE 解决方法 (ff281991)
  • 不在 IE 之外的地方设置类型属性钩子 (9e66fe9a)

核心

  • 删除过时的解决方法,更新支持注释 (e2fe97b7)
  • $.parseHTMLdocument.implementation 切换到 DOMParser (0e123509)
  • 修复 exports 设置,使打包器可以使用 ESM 和 CommonJS (#5416, 60f11b58)
  • 添加有关命名导出的更多信息 (5f869590)
  • 简化浏览器支持减少后的代码 (93ca49e6)
  • 将工厂移动到单独的导出 (46f6e3da)
  • src/ 中使用命名导出 (#5262, f75daab0)
  • 修复 HTMLDocument 对象上 jQuery.text() 的回归 (#5264, a75d6b52)
  • 选择器:将 jQuery.contains 从选择器移动到核心模块 (024d8719)
  • 移除 jQuery.fn.init 的根参数 (d2436df3)
  • 不要依赖 splice 存在于输入中 (9c6f64c7)
  • 操作:添加基本的 TrustedHTML 支持 (#4409, de5398a6)
  • 报告 parseXML 中的浏览器错误 (#4784, 89697325)
  • 使 jQuery.isXMLDoc 接受 falsy 输入 (#4782, fd421097)
  • 停止支持 Edge Legacy(即非 Chromium Microsoft Edge) (#4568, e35fb62d)
  • 在 iframe 上下文中触发 iframe 脚本,在 globalEval 中添加 doc 参数 (#4518, 4592595b)
  • 在精简版本中排除 callbacks & deferred 模块 (fbc44f52)
  • 迁移到 ES 模块 🎉 (d0ce00cd)
  • 在支持的地方使用 Array.prototype.flat (#4320, 9df4f1de)
  • 移除 jQuery 原型上的 push、sort & splice 的私有副本 (b59107f5)
  • 实现 .even() & .odd() 以替换 POS :even & :odd (78420d42)
  • 弃用 jQuery.trim (#4363, 5ea59460)
  • 移除 IE 特定的支持测试,依赖 document.documentMode (#4386, 3527a384)
  • 停止支持 IE <11、iOS <11、Firefox <65、Android Browser & PhantomJS (#3950, #4299, cf84696f)
  • 移除已弃用的 jQuery API (#4056, 58f0c00b)

CSS

  • 修复 <col> 表格元素的尺寸 (#5628, eca2a564)
  • 从 finalPropName 中删除缓存 (640d5825)
  • 测试:修复测试,并支持 CSS zoom 下的测试 (5489, 071f6dba)
  • 修复最初隐藏的 iframe 的 reliableTrDimensions 支持测试 (b1e66a5f)
  • 选择器:与 3.x 对齐,移除外部 `selector.js` 包装器 (53cf7244)
  • 使 reliableTrDimensions 支持测试与 Bootstrap CSS 协同工作 (#5270, 65b85031)
  • 使 `offsetHeight( true )` 等包含负边距 (#3982, bce13b72)
  • 对于仅包含空格的 CSS 变量值返回 `undefined` (#5120) (7eb00196)
  • 不要修剪未定义的自定义属性的空格 (ed306c02)
  • 跳过 `addClass( array )` 中的 falsy 值,压缩代码 (#4998, a338b407)
  • 证明在 CSS 属性值上使用 rtrim 的合理性 (655c0ed5)
  • 修剪 CSS 自定义属性值周围的空格 (#4926, efadfe99)
  • 在 jQuery 精简版本中包含 `show`、`hide` & `toggle` 方法 (297d18dd)
  • 移除 opacity CSS hook (865469f5)
  • 解决 IE/Edge 中表行上 getComputedStyle 的错误 (4490, 26415e08)
  • 不要自动将 "px" 添加到少数例外情况下的属性 (2795, 00a9c2e5)

数据

  • 重构以减小尺寸 (805cdb43)
  • 事件:操作:防止与 Object.prototype 发生冲突 (3256, 9d76c0b1)
  • 分离 data & css/effects camelCase 实现 (3355, 8fae2120)

Deferred

  • 将 `getStackHook` 重命名为 `getErrorHook` (#5201, 258ca1ec)
  • 尊重 jQuery.Deferred.exceptionHook 中的 source maps (#3179, 0b9c5037)
  • 将 master 重命名为 primary (a32cf632)

已弃用

  • 使用非弃用的方法定义 `.hover()` (fd6ffc5e)
  • 移除 jQuery.trim (0b676ae1)
  • 修复 AMD 参数顺序 (f810080e)

Dimensions

  • 为不可靠的 TR 尺寸添加偏移量属性回退 (4529, 3bbbc111)

文档

  • 更新了漏洞报告流程并添加了升级步骤 (02cf4ee0)
  • 修复注释中的一些小问题 (e4d4dd81)
  • 更新 README 中的 herodevs 链接 (#5695, 093e63f9)
  • 使 CONTRIBUTING.md 与 3.x-stable 一致 (d9281061)
  • 更新 CONTRIBUTING.md (4ef25b0d)
  • 向 README 添加版本支持部分 (cbc2bc1f)
  • 将剩余的 HTTP URL 更新为 HTTPS (7cdd8374)
  • 修复程序包 README 中的模块链接 (ace646f6)
  • 更新 CONTRIBUTING.md 中的 watch 任务 (77d6ad71)
  • 修复 codespell 发现的错别字 (620870a1)
  • 移除过时的 gitter 徽章 (67cb1af7)
  • 从 PR 模板中移除“Grunt 构建”部分 (988a5684)
  • 移除 README 中的过时徽章 (bcd9c2bc)
  • 更新已发布程序包的 README (edccabf1)
  • 移除来自 GitHub Actions 注释中的 git.io (016872ff)
  • 更新 README 中的 webpack 网站 (01819bc3)
  • 添加指向 patchwelcome 和 help wanted issue 的链接 (924b7ce8)
  • 添加指向预览新 CLA 的链接 (683ceb8f)
  • 修复不正确的 `trac-NUMBER` 引用 (eb9ceb2f)
  • 移除旧 jquery 源代码中的过期链接 (#4997) (ed066ac7)
  • 移除来自源代码的 Web Archive 链接 (#4981, e24f2dcf)
  • 将 `#NUMBER` Trac issue 引用替换为 `trac-NUMBER` (5d5ea015)
  • 更新 CONTRIBUTING.md 中最新的 jQuery 构建的 URL (9bdb16cd)
  • 移除拉取请求模板中的 CLA 复选框 (e1248931)
  • 更新 IRC 到 Libera 并修复 LAMP 死链接 (175db73e)
  • 更新 GitHub issue 模板中的“频繁报告的问题” (7a6fae6a)
  • 将 JS Foundation 提及更改为 OpenJS Foundation (11611967)
  • 添加 SECURITY.md,显示安全电子邮件地址 (2ffe54ca)
  • 修复错别字 (1a7332ce)
  • 更新 jsdom 仓库的链接 (a62309e0)
  • 将超链接使用 https (73415da2)
  • 移除 README 中 event/alias.js 模块的提及 (3edfa1bc)
  • 将指向 EdgeHTML issue 的链接通过 Web Archive (1dad1185)
  • 将用户引导至 GitHub 文档以克隆仓库 (f1c16de2)
  • 将 README 中的 OS X 更改为 macOS (5a3e0664)
  • 将大多数 URL 更新为 HTTPS (f09d9210)
  • 将指向 Homebrew 的链接从 HTTP 转换为 HTTPS (e0022f23)

效果

  • 修复 .stop() 中的不必要的条件语句 (#4374, 110802c7)

Effects

  • 移除 jQuery.fx.interval (6c2c7362)

事件

  • 在 beforeunload 中使用 .preventDefault() (7c123dec)
  • 提高 leverageNative 中内部原生事件的鲁棒性 (#5459, 527fb3dc)
  • 避免 jQuery.event.special 与 Object.prototype 之间的冲突 (bcaeb000)
  • 简化 leverageNative 中已保存数据的检查 (dfe212d5)
  • 使 trigger(focus/blur/click) 与原生处理程序协同工作 (#5015, 6ad3651d)
  • 通过 focusin/focusout 在 IE 中模拟 focus/blur (#4856, #4859, #4950, ce60d318)
  • 不要在 .on(focus).off(focus) 后破坏 focus 触发 (4867, e539bac7)
  • 不要让 focus 重新触发将焦点移回原始元素 (#4382, dbcffb39)
  • 不要在元素在 blur 时被移除时崩溃 (#4417, 5c2d0870)
  • 移除 event.which shim (#3235, 1a5fff4c)
  • 移除 jQuery.event.global (18db8717)
  • 仅将事件附加到接受数据的对象 – 真正地 (#4397, d5c505e3)
  • 停止兼容 focusin & focusout 事件 (#4300, 8a741376)
  • 防止 leverageNative 注册重复的虚拟处理程序 (eb6c0a7c)
  • 修复处理多个异步焦点事件的问题 (#4350, ddfa8376)

操作

  • 使 jQuery.cleanData 在清理期间不会跳过元素 (#5214, 3cad5c43)
  • 泛化一个测试以支持 IE (88690ebf)
  • 支持 $el.html(selfRemovingScript) (#5378) (#5377, 937923d9)
  • 将 domManip 提取到单独的文件 (ee6e8740)
  • 不要从脚本中移除 HTML 注释 (#4904, 2f8f39e4)
  • 在 DOM 操作中尊重脚本的 crossorigin 属性 (#4542, 15ae3614)
  • 避免在 buildFragment 中连接字符串 (9c98e4e8)
  • 使 jQuery.htmlPrefilter 成为一个恒等函数 (90fed4b4)
  • 选择器:尽可能使用 nodeName 工具来节省大小 (4504fc3d)

Offset

  • 提高在查找“真实”偏移父元素时的搜索深度 (556eaf4a)

选择器

  • 移除对 :has 的兼容处理;在 iPhone 和 iPad 上进行测试 (65e35450)
  • 正确弃用 jQuery.expr[ ":" ]/jQuery.expr.filters (329661fd)
  • 使 selector.js 模块依赖于 attributes/attr.js (#5379, e06ff088)
  • 消除 selector.js 对各种模块的依赖 (e8b7db4b)
  • 重新暴露 jQuery.find.{tokenize,select,compile,setDocument} (#5259, 338de359)
  • 停止依赖 CSS.supports( "selector(…)" ) (#5194, 68aa2ef7)
  • 将 jQuery 选择上下文逻辑回移植到 selector-native (#5185, 2e644e84)
  • 使选择器列表再次与 qSA 协同工作 (#5177, 09d988b7)
  • 实现 uniqueSort 可链式方法 (#5166, 5266f23c)
  • 重新引入 selector-native.js (4c1171f2)
  • 操作:修复模板内容中的 DOM 操作 (#5147, 3299236c)
  • 放弃对遗留伪类的支持,测试自定义伪类 (8c7da22c)
  • 如果 CSS.supports(selector(...)) 不兼容,则使用 jQuery :has (#5098, d153c375)
  • 移除对 Chrome <=77 的 "a:enabled" 兼容处理 (c1ee33ad)
  • 使空属性选择器再次在 IE 中工作 (#4435, 05184cc4)
  • 在 uniqueSort 中使用浅层文档比较 (#4441, 15750b0a)
  • 添加一个测试,用于在逗号后的无效选择器上抛出错误 (6eee5f7f)
  • 使带有前导组合器的选择器再次使用 qSA (ed66d5a2)
  • 使用浅层文档比较以避免 IE/Edge 崩溃 (#4441, aa6344ba)
  • 减小大小,简化 setDocument (29a9544a)
  • 尽可能利用 :scope 伪类 (#4453, df6a7f7f)
  • 恢复 querySelectorAll 快捷方式的使用 (cef4b731)
  • 将 Sizzle 内联到选择器模块 (47835965)
  • 将 Sizzle 测试移植到 jQuery (79b74e04)

支持

  • 确保支持 div 的显示设置为 block (#4832, 09f25436)

Tests

  • 修复 Headless Chrome 中的“外部视图位置”测试 (23d72cb1)
  • 修复 Chrome 141 中的选择器测试 (25a1b080)
  • 将 IE 的 nomodule 测试超时时间从 1 秒增加到 5 秒 (5eab0a3c)
  • 修复模块/nomodule 测试的易出错性 (5964acf3)
  • 使用 releases.jquery.com 作为 AJAX 测试的外部主机 (f21a6ea6)
  • 修复 jQuery.get( String, null-ish, null-ish, String ) 的测试 (05325801)
  • 添加 jQuery.get( String, null-ish, null-ish, String ) 的测试 (76687566)
  • 将 3.x-stable 中的 hidden="until-found" 属性测试回移植 (3a31866b)
  • 将测试运行程序迁移到 jquery-test-runner (733e62d2)
  • 将自定义属性 getter 测试添加到选择器模块 (44667709)
  • 切换到更新的 promises-aplus-tests 分支 (559bc5ac)
  • 在 GitHub Actions 中以 IE 模式运行 Edge 测试 (6d78c076)
  • 在真实 Firefox ESR 上运行测试 (4b7ecbad)
  • 使 mock.php 间距与 3.x-stable 分支对齐 (d5ae14f6)
  • 替换 qunit fixture 中的死链接 (dbc9dac7)
  • 替换 express 为基本的 Node 服务器 (c85454a8)
  • 移除不必要的滚动功能测试 (ea31e4d5)
  • 使 :has 选择器测试与 3.x-stable 对齐 (f2d9fde5)
  • 撤销并发组更改 (fa73e2f1)
  • 将 github ref 添加到并发组 (5880e027)
  • 使 beforeunload 事件测试无论扩展如何都能工作 (399a78ee)
  • 共享所有工作程序类型的队列/浏览器处理 (284b082e)
  • 改进不同类型值的差异 (b9d333ac)
  • 显示任何和所有实际/预期值 (f80e78ef)
  • 将差异添加到测试报告器 (44fb7fa2)
  • 将实际和预期消息添加到测试报告器 (1e84908b)
  • 修复失败的浏览器确认导致的工作程序重新启动 (fedffe74)
  • 为测试运行器添加 –hard-retries 选项 (822362e6)
  • 修复在服务器未停止的情况下清理的问题 (0754d596)
  • 修复不稳定的消息日志;忽略删除 worker 失败 (02d23478)
  • 在 BrowserStack 测试中重用浏览器 worker (#5428) (95a4c94b)
  • 使用允许列表代替白名单 (2b97b6bb)
  • 将测试基础设施迁移到最小依赖 (dfc693ea)
  • 修复 Node.js 20 上的 Karma 测试 (d478a1c0)
  • 禁用 ":lang respects escaped backslashes" 测试 (#5271, 62b9a258)
  • 指示 Chrome 112 和 Safari 16.4 通过 cssHas 支持测试 (89ef81f8)
  • 正确测试 AJAX 已弃用的事件别名 (cff28998)
  • 指示 Firefox 106+ 通过 cssSupportsSelector 测试 (716130e0)
  • 移除 Firefox XML 解析问题的一个兼容处理 (e7ffe1f1)
  • 修复 QUnit CSS 文件的链接 (8cf39b78)
  • 根据编译标志而不是 API 存在性排除测试 (#5069, fae5fee8)
  • 兼容 Firefox 中的 XML 解析错误 (af1cd6f2)
  • 将 colors 版本锁定到 1.4.0 (9603b3c8)
  • 跳过 TestSwarm 上的 ETag AJAX 测试 (00c060d1)
  • 允许 statusText 在 AJAX 测试中为 "success" (19ced963)
  • 使 Karma 浏览器超时时间大于 QUnit 的超时时间 (4fd6912b)
  • 不要在 mock.php 的 cspClean 操作中移除 csp.log (1019074f)
  • 通过 HTTPS 加载 TestSwarm 监听器 (d225639a)
  • 将背景图像从在线文件切换到本地 1×1.jpg (482f8462)
  • 从 mock.php 中移除非典型的回调参数字符 (a7027463)
  • 让更多测试在 Chrome 和 Firefox 中原生运行 (50e8e846)
  • 修复缺少 dataType 时脚本无法自动执行的测试 (d38528b1)
  • 识别 Node.js 模拟服务器中带有句点的回调函数 (df6858df)
  • 在 Safari 中跳过“jQuery.ajax() 在卸载时”测试 (c18dc496)
  • 移除一个未使用的局部变量 (82b87f6f)
  • 移除剩余的过时 jQuery.cache 引用 (d96111e1)
  • 解决 iOS 8 – 12 中最近的 XSS 测试中的失败 (11066a9e)
  • 添加针对最近修复的操纵 XSS 问题的测试 (dc06d68b)
  • 仅对匹配的窗口和文档使用一个 focusin/out 处理程序 (9b732043)
  • 修复“jQuery.ajax() – JSONP – 同域”测试中的不稳定性 (7b0864d0)
  • 将必要的 done() 调用传递给 assert.async() (364476c3)
  • 移除过时的 jQuery 数据测试 (eb35be52)
  • 在 Firefox 中跳过“表格行上带有幻影边框的宽度/高度”测试 (a612733b)
  • 不要在 Chrome 中测试卸载时的同步 XHR (323575fb)
  • 停止在测试中使用 jQuery.find (1d624c10)
  • 移植 Sizzle 中的更改 (ac5f7cd8)
  • 修复 testinit.js 中的注释 (7bdf307b)
  • 更新 npo.js 并包含未压缩的源代码 (b334ce77)
  • 将事件测试的回退限制为 TestSwarm (bde53edc)
  • 修复 IE 中的新 focusin/focusout 测试 (6f2fae7c)
  • 修复 core-js polyfill 的包含方法 (2e4b79ab)

Traversing

  • 修复 IE 中带有子元素的 <object> 上的 contents() (ccbd6b93)
  • 修复带有子元素的 <object> 上的 contents() (#4384, 4d865d96)

jQuery 4.0.0 Release Candidate 1

发布于 作者

来了!差不多了。jQuery 4.0.0-rc.1 现在可用。这是我们说“我们认为准备好了,现在用很多棍子戳戳它”的方式。如果未发现需要第二个发布候选版本的问题,jQuery 4.0.0 正式版将会发布。请尝试这个版本,并告诉我们您是否遇到任何问题

一个4.0 升级指南和一个jQuery Migrate 发布现在也可用,但两者在最终 jQuery Core 发布之前都可能发生变化。

jQuery 4.0.0 中的许多重大更改是团队多年来一直想要进行的更改,但无法在补丁或次要版本中进行。我们删除了遗留代码(包括删除对 IE 11 之前版本的支持),删除了一些以前已弃用的 API,删除了从未记录过的公共函数的某些仅内部参数,并放弃了对一些过于复杂的“魔法”行为的支持。

像往常一样,该版本可在我们的 CDN 和 npm 包管理器上获得。第三方 CDN 不会托管此 rc 版本,但稍后会托管 4.0.0 正式版本。以下是 jQuery 4.0.0 rc.1 的一些亮点。

下载

您可以从 jQuery CDN 获取文件,或直接链接到它们

https://code.jquery.com/jquery-4.0.0-rc.1.js

https://code.jquery.com/jquery-4.0.0-rc.1.min.js

您也可以从 npm 获取此版本

npm install jquery@4.0.0-rc.1

精简版

有时您不需要 ajax,或者更喜欢使用许多独立的专注于 ajax 请求的库。而且,通常使用 CSS 和类操作进行 Web 动画更简单。最后,所有 jQuery 支持的浏览器(IE11 除外)现在都支持本机 Promises,因此在大多数情况下不再需要 Deferreds 和 Callbacks。除了包含所有内容的常规 jQuery 版本之外,我们还发布了一个排除这些模块的“精简”版本。这些天 jQuery 的大小很少成为加载性能问题,但精简版本比常规版本小约 8k gzip 字节。这些文件也可用在 npm 包和 CDN 上

https://code.jquery.com/jquery-4.0.0-rc.1.slim.js

https://code.jquery.com/jquery-4.0.0-rc.1.slim.min.js

这些更新已经作为 npm 上的当前版本提供。有关获取 jQuery 的所有方式的信息,请访问 https://jqueryjs.cn/download/。公共 CDN 今天会收到他们的副本,请给他们几天时间来发布文件。如果您急于开始,请使用我们 CDN 上的文件,直到他们有机会更新为止。

感谢

感谢所有参与此版本发布的人员,包括提交补丁、报告错误或测试的人员,包括 ac-mmiMichał Gołębiowski-Owczarekneogy-akash 和整个 jQuery 团队。

变更日志

完整变更日志:4.0.0-rc.1

CSS

核心

  • 删除过时的解决方法,更新支持注释 (e2fe97b7)
  • $.parseHTMLdocument.implementation 切换到 DOMParser (0e123509)

文档

  • 使 CONTRIBUTING.md 与 3.x-stable 一致 (d9281061)
  • 更新 CONTRIBUTING.md (4ef25b0d)
  • 向 README 添加版本支持部分 (cbc2bc1f)

事件

  • 在 beforeunload 中使用 .preventDefault() (7c123dec)

操作

  • 使 jQuery.cleanData 在清理期间不会跳过元素 (#5214, 3cad5c43)

选择器

  • 正确弃用 jQuery.expr[ ":" ]/jQuery.expr.filters (329661fd)

jQuery 4.0.0 第二个 Beta 版本

发布于 作者

去年二月,我们发布了 jQuery 4.0.0 的第一个 Beta 版本。现在我们准备发布第二个 Beta 版本,并且预计很快会发布候选版本™。此版本包含对 jQuery 测试基础设施的重大重写,移除了所有已弃用或支持不足的依赖项。但促使发布第二个 Beta 版本的主要变化是修复了 打包器(bundler)的 exports 字段。关于这些以及其他更改的更多信息请参见下文。

jQuery 4.0.0 中的许多重大更改是团队多年来一直想要进行的更改,但无法在补丁或次要版本中进行。我们删除了遗留代码(包括删除对 IE 11 之前版本的支持),删除了一些以前已弃用的 API,删除了从未记录过的公共函数的某些仅内部参数,并放弃了对一些过于复杂的“魔法”行为的支持。

我们将在最终发布之前发布一份全面的升级指南,概述移除的代码以及如何迁移。 jQuery Migrate 插件也将准备就绪以提供帮助。现在,请尝试使用此版本,并告知我们您是否遇到任何问题

像往常一样,该版本可在 我们的 CDN 和 npm 包管理器上获得。第三方 CDN 不会托管此 Beta 版本,但稍后会托管 4.0.0 最终版本。以下是 jQuery 4.0.0 beta.2 的一些亮点。

CommonJS + ESM:奇怪的床伴

有许多不同的方法可以在项目中包含 jQuery。支持所有这些方法可能很困难,尤其是在环境同时支持 CommonJS 和 ESM 模块时。我们希望支持 jQuery 可能被包含的所有方式,无论是使用命名导出还是默认导出。此外,我们希望确保 jQuery 永远只被包含一次,即使在同一个环境或 bundle 中,jQuery 既使用 ESM 的 import 导入,又使用 CommonJS 的 require 导入。我们认为我们已经找到了一种支持 Node.js 和 rollup、webpack 和 parcel 等打包器的解决方案。更多详细信息请参见 PR。此外,我们创建了一个 wiki 页面来解释 jQuery 的 package.json 中的 exports 属性在 4.0 中将如何工作。

布尔属性:生存还是……

HTML 规范定义了通常与布尔属性相关的布尔属性。如果缺少该属性,则它与 false 属性值相关联,如果存在则与 true 属性值相关联。布尔内容属性的唯一有效值是空字符串或完整的属性名称(例如 checked="checked")。

jQuery 历史上一直试图在这里提供帮助,并在 .attr() API 中以特殊方式处理布尔属性

  1. 对于 getter,只要属性存在,它就会返回
    忽略值的小写属性名称。
  2. 对于 setter,当传递 false 时,它会移除该属性;
    否则,它会忽略传递的值并设置该属性——
    有趣的是,在 jQuery >=3 中不再小写。

问题在于规范偶尔会将布尔属性转换为具有特殊行为的附加属性值的属性——一个例子是新的 "until-found" 值用于 hidden 属性。我们的 setter 规范化意味着使用 .attr() 无法传递这些值(.prop() 不受影响)。此外,偶尔会引入新的布尔属性,并且 jQuery 无法轻松地将它们添加到列表中,而不会造成破坏性更改。

此补丁移除了对布尔属性的任何特殊处理——getter 以原样返回该值,setter 设置提供的该值,只有一个例外。为了保持向后兼容性,此补丁使 false 布尔值触发对所有非 ARIA 属性的属性移除。例如,.attr( "checked", false ) 将继续移除 checked 属性,这是将相应属性设置为 false 的唯一方法。ARIA 属性免于该规则,因为其中许多属性将字符串 "false" 识别为具有语义与属性缺失不同的有效值。要移除 ARIA 属性,请使用 .removeAttr() 或将 null 作为值传递给 .attr()

表格中元素的位置

jQuery 4.0.0-beta.2 还修复了在查找表格中元素位置时出现的一些不一致行为。基于位置的偏移父元素可能会根据元素的 position 样式是 static 还是 relative 而发生变化。

<div id="container" style="position: relative;">
    <table>
        <tr>
            <td>
                <span id="static"></span>
                <span id="relative" style="position: relative;"></span>
            </td>
        </tr>
    </table>
</div>

之前,$('#static').position() 返回相对于包含 <td> 元素的位置,而 $('#relative').position() 返回相对于 #container 的位置。

现在,这两个元素都返回相对于 #container 的位置。

下载

您可以从 jQuery CDN 获取文件,或直接链接到它们

https://code.jquery.com/jquery-4.0.0-beta.2.js

https://code.jquery.com/jquery-4.0.0-beta.2.min.js

您也可以从 npm 获取此版本

npm install jquery@4.0.0-beta.2

精简版

有时您不需要 ajax,或者更喜欢使用许多独立的专注于 ajax 请求的库。而且,通常使用 CSS 和类操作进行 Web 动画更简单。最后,所有 jQuery 支持的浏览器(IE11 除外)现在都支持本机 Promises,因此在大多数情况下不再需要 Deferreds 和 Callbacks。除了包含所有内容的常规 jQuery 版本之外,我们还发布了一个排除这些模块的“精简”版本。这些天 jQuery 的大小很少成为加载性能问题,但精简版本比常规版本小约 8k gzip 字节。这些文件也可用在 npm 包和 CDN 上

https://code.jquery.com/jquery-4.0.0-beta.2.slim.js

https://code.jquery.com/jquery-4.0.0-beta.2.slim.min.js

这些更新已经作为 npm 上的当前版本提供。有关获取 jQuery 的所有方式的信息,请访问 https://jqueryjs.cn/download/。公共 CDN 今天会收到他们的副本,请给他们几天时间来发布文件。如果您急于开始,请使用我们 CDN 上的文件,直到他们有机会更新为止。

感谢

感谢所有参与此版本发布的人员,包括提交补丁、报告错误或进行测试的人员,包括 Michał Gołębiowski-OwczarekJ.SonLiam James 和整个 jQuery 团队。

我们在 Mastodon 上!

jQuery 有一个 Mastodon 帐户!我们现在将发布和更新发布到 X 和 Mastodon。此外,您可能对关注一些拥有 Mastodon 帐户的团队成员感兴趣。

jQuery: https://social.lfx.dev/@jquery

mgol: https://hachyderm.io/@mgol

timmywil: https://hachyderm.io/@timmywil

变更日志

完整更改日志:4.0.0-beta.2

属性

  • 使 .attr( name, false ) 移除所有非 ARIA 属性 (#5388, 063831b6)

构建

  • 将 github-actions 组更新为 2 个更新 (3a98ef91)
  • 更新依赖项;修复 Windows 上的打包器测试 (cb8ab6cc)
  • 改进 eslint 配置的特异性;添加 ecma 版本 (74970524)
  • 将 github-actions 组更新为 2 个更新 (46b9e480)
  • 将 dependabot PR 分组更新为 GitHub Actions (3cac1465)
  • 更新 actions/cache、actions/checkout 和 github/codeql-action (df1df950)
  • 将 express 从 4.18.3 升级到 4.19.2 (691c0aee)
  • 使比较大小缓存可读以进行手动编辑 (783c9d69)
  • 修复当分支处于脏状态时,精简文件的尺寸比较 (8a3a74c4)
  • 迁移更多 fs.promises 的使用;使用 node: 协议 (ae7f6139)
  • 将 github/codeql-action 从 3.24.0 升级到 3.24.6 (ae67ace6)
  • 将 actions/cache 从 4.0.0 升级到 4.0.1 (68f772e0)
  • 停止支持 Node 10 (5aa7ed88)
  • 添加 GitHub Actions 工作流以更新 Filestash (0293d3e3)
  • 更新 jenkins 脚本以仅构建 (c21c6f4d)
  • 更新 GitHub Actions (#5402) (bf11739f)

CSS

  • 测试:修复测试并支持 CSS 缩放下的测试 (#5489, 071f6dba)

核心

  • 修复 exports 设置,使打包器可以使用 ESM 和 CommonJS (#5416, 60f11b58)

文档

  • 将剩余的 HTTP URL 更新为 HTTPS (7cdd8374)

事件

  • 提高 leverageNative 中内部原生事件的鲁棒性 (#5459, 527fb3dc)

Offset

  • 提高在查找“真实”偏移父元素时的搜索深度 (556eaf4a)

发布

Tests

  • 移除不必要的滚动功能测试 (ea31e4d5)
  • 使 :has 选择器测试与 3.x-stable 对齐 (f2d9fde5)
  • 撤销并发组更改 (fa73e2f1)
  • 将 github ref 添加到并发组 (5880e027)
  • 使 beforeunload 事件测试无论扩展如何都能工作 (399a78ee)
  • 共享所有工作程序类型的队列/浏览器处理 (284b082e)
  • 改进不同类型值的差异 (b9d333ac)
  • 显示任何和所有实际/预期值 (f80e78ef)
  • 将差异添加到测试报告器 (44fb7fa2)
  • 将实际和预期消息添加到测试报告器 (1e84908b)
  • 修复失败的浏览器确认导致的工作程序重新启动 (fedffe74)
  • 为测试运行器添加 –hard-retries 选项 (822362e6)
  • 修复在服务器未停止的情况下清理的问题 (0754d596)
  • 修复不稳定的消息日志;忽略删除 worker 失败 (02d23478)
  • 在 BrowserStack 测试中重用浏览器 worker (#5428) (95a4c94b)
  • 使用允许列表代替白名单 (2b97b6bb)
  • 将测试基础设施迁移到最小依赖 (dfc693ea)
  • 修复 Node.js 20 上的 Karma 测试 (d478a1c0)

升级 jQuery:致力于打造健康的 Web

发布于 作者

jQuery 对网络的影响将始终显而易见。2006年首次推出时,jQuery 几乎立即成为 Web 开发人员的基本工具。它简化了 JavaScript 编程,使操作 HTML 文档、处理事件、执行动画等变得更加容易。此后,它在 Web 标准和浏览器功能的演进中发挥了重要作用,并继续发挥着重要作用。

随着现代 JavaScript 框架的兴起,可能选择在新的项目中使用 jQuery 的开发人员越来越少,但全球使用量仍然非常高。在分析 IDC 进行的一项调查的结果后,OpenJS 基金会估计所有网站的 90% 使用 jQuery。其中约有三分之一使用的是过时的版本。

jQuery 团队和 OpenJS 基金会正在通过 Healthy Web 检查活动来解决这个问题。本指南将解释为什么保持 jQuery 版本更新很重要,并指导您完成升级 jQuery 的过程。

为什么升级 jQuery 对安全性很重要?

安全漏洞:与任何软件一样,jQuery 的代码库中可能包含安全漏洞。这些漏洞可能从跨站脚本 (XSS) 漏洞到更严重的问题,例如远程代码执行 (RCE)。当发现漏洞时,jQuery 团队会发布补丁和更新来解决这些漏洞。通过升级到最新版本的 jQuery,您可以确保您的应用程序受益于这些安全修复,从而降低被攻击者利用的风险。

安全最佳实践:较新版本的 jQuery 通常会融入安全最佳实践和增强功能,以减轻常见的安全威胁。这些改进可能包括更严格的输入验证、改进的用户生成内容处理以及更好的 XSS 攻击防护。通过升级,您可以采用这些最佳实践并加强应用程序的安全性。

合规性要求:许多行业和监管框架要求组织维护最新的软件并及时解决已知的安全漏洞。未能升级 jQuery 并解决安全问题可能会导致不符合这些要求。

浏览器支持如何?

jQuery 1.x、2.x 和 3.x 各支持不同的浏览器列表。但是,考虑到当前的浏览器市场使用情况,jQuery 3.x 支持的浏览器,包括 IE 9+,在几乎所有情况下都应该足够了。即使 微软宣布已正式停止支持,jQuery 4.x 仍将支持 IE11。

如何升级 jQuery?

jQuery 团队提供了 jQuery Migrate 插件,以尽可能简化 jQuery 的升级过程。它主要用作开发工具,可在浏览器控制台中生成警告消息,这些消息可用于识别和修复兼容性问题。它会临时恢复已弃用的功能和行为,以便旧代码仍然可以在较新版本的 jQuery 上运行,同时解决兼容性问题。

jQuery Migrate 有两个版本:1.x3.x(没有 Migrate 2.x)。一次只能使用一个版本,但如果从 jQuery 1.9 之前的版本升级,则可能需要依次使用这两个版本。

例如,如果您的当前 jQuery 版本是 1.4.4,请首先使用 jQuery Migrate 1.x 升级到 jQuery 1.12.4,然后使用 jQuery Migrate 3.x 升级到最新的 jQuery(截至撰写本文时为 3.7.1)。如果您的当前版本是 2.2.4,则只需要使用 jQuery Migrate 3.x 升级到最新的 jQuery。

使用 jQuery Migrate

首先,在加载 jQuery *之后* 将 jQuery Migrate 添加到您的页面。

<script src="https://code.jquery.com/jquery-3.7.1.js"></script>
<script src="https://code.jquery.com/jquery-migrate-3.4.1.js"></script>

然后,测试您的网站或应用程序。当使用不同的 jQuery API 时,jQuery Migrate 会将消息记录到控制台,警告任何弃用或破坏性更改。一次解决每个警告。

最后,当控制台中不再记录警告并且所有破坏性更改都已解决时,可以删除 jQuery Migrate 并完成迁移!

有关更多详细信息,请参阅 jQuery Migrate README

jQuery 升级指南

当您正在寻找有关破坏性更改的更多详细信息,或者只是想查看每个版本的完整破坏性更改列表时,jQuery 升级指南可能会有所帮助。有适用于 jQuery 1.93.03.5 的升级指南,其中列出了这些版本中发生的所有破坏性更改。大多数列出的破坏性更改可能不适用于您的代码,但这些指南会为每个更改添加一些上下文和解释。

关于未来 jQuery 版本的一点说明

随着 jQuery 4.0 即将发布,您可能会想升级到 jQuery 4.x 的过程是什么。答案是它与升级到 jQuery 3.x 相同,并且仍然可以一步完成。换句话说,无需先升级到 jQuery 3.x 再升级到 jQuery 4.x。您可以直接从 1.9+ 升级到 jQuery 4.x。我们还将为 jQuery 4.0 准备好升级指南。

结论

升级 jQuery 对于维护 Web 应用程序的安全性、性能和兼容性至关重要。通过遵循本指南中概述的步骤,您可以安全地升级到最新版本的 jQuery,并利用其新功能和改进,同时确保您的 Web 应用程序免受任何已发现的漏洞的侵害。请定期检查更新并及时了解新版本,以保持代码库的最新状态。

jQuery 4.0.0 BETA!

发布于 作者

jQuery 4.0.0 已经开发了很长一段时间,但现在已经准备好进行 Beta 版本发布了!有很多内容需要介绍,团队很高兴看到它的发布。我们修复了错误,改进了性能,并进行了一些破坏性更改。我们最终移除了对 IE<11 的支持!尽管如此,我们预计破坏性会降到最低。

许多破坏性更改是团队多年来一直希望进行的,但无法在补丁或次要版本中进行。我们精简了遗留代码,删除了之前已弃用的 API,删除了公共函数中从未记录的一些仅限内部使用的参数,并放弃了对一些过于复杂的“魔法”行为的支持。

我们将在最终发布之前发布一份全面的升级指南,以概述已删除的代码以及如何迁移。 jQuery Migrate 插件也将准备就绪以提供帮助。现在,请尝试 Beta 版本并 告知我们您是否遇到任何问题

像往常一样,该版本可在 我们的 CDN 和 npm 包管理器上获得。第三方 CDN 将不会托管此 Beta 版本,但稍后会托管 4.0.0 最终版本。以下是 jQuery 4.0.0 Beta 的一些亮点。

告别 IE<11

jQuery 4.0 停止支持 IE 10 及更早版本。有些人可能想知道为什么我们没有移除对 IE 11 的支持。我们计划分阶段移除支持,下一个步骤 将在 jQuery 5.0 中发布。现在,我们将从移除专门支持 IE 11 之前版本的代码开始,从而减少 867 个 gzip 压缩字节

我们还停止支持其他非常旧的浏览器,包括 Edge Legacy、iOS <11、Firefox <65 和 Android Browser。您无需进行任何更改。如果您需要支持任何这些浏览器,只需坚持使用 jQuery 3.x。

已弃用的 API 已移除

这些函数已经弃用了很多版本。现在是时候 移除它们了,因为我们已经发布了主要版本。这些函数要么一直打算用于内部,要么现在在所有受支持的浏览器中都有原生等效项。被移除的函数是

pushsortsplice 已移除

jQuery 原型长期以来一直拥有行为与任何其他 jQuery 方法不同的数组方法,并且始终仅用于内部用途。这些方法是 pushsortsplice。我们切换到使用数组函数而不是 jQuery 原型来使用这些方法。例如,$elems.push( elem ) 变成了 [].push.call( $elems, elem )。我们在此处提及,以防有任何插件可能依赖这些方法。

focusinfocusout 事件顺序

长期以来,浏览器对焦点和模糊事件的顺序存在分歧,包括 focusinfocusoutfocusblur。最终,所有 jQuery 4.0 支持的浏览器的最新版本都已收敛到通用的事件顺序。不幸的是,这与 jQuery 多年来选择的顺序不同,这导致了破坏性更改。至少现在每个人都在同一页面上了!

jQuery 在先前版本中对所有四个事件的顺序是

1. focusout
2. blur
3. focusin
4. focus

从 jQuery 4.0 开始,我们 不再覆盖原生行为。这意味着除了 IE 之外的所有浏览器都将遵循当前的 W3C 规范,即

1. blur
2. focusout
3. focus
4. focusin

对于那些好奇的人来说,W3C 规范先前定义了不同的顺序

1. focusout
2. focusin
3. blur
4. focus

但是,很少有人认为它直观并且 规范2023 年 被更改为与浏览器已经实现的内容相匹配。具有讽刺意味的是,唯一遵循旧规范的浏览器是 Internet Explorer。

FormData 支持

jQuery.ajax添加对二进制数据(包括 FormData)的支持。 以前,二进制数据不是已知的数据类型,并且被转换为字符串。可以通过禁用数据转换并手动处理数据来禁用该行为,但我们决定使其自动工作。从技术上讲,这是一个破坏性更改,但应该更接近预期的行为。

自动 JSONP 提升已移除

以前,带有 dataType: "json" 和提供的回调的 jQuery.ajax 会被转换为 JSONP 请求。如今,与跨域后端交互的首选方式是使用 CORS,这在 jQuery 4.0 支持的所有浏览器中都有效。这应该有助于避免在开发人员不知道可以通过 JSONP 从远程域执行代码的情况下发生意外行为。

jQuery 源代码迁移到 ES 模块

main 分支上的 jQuery 源代码从 AMD 迁移到 ES 模块 时,这是一个特殊的日子。jQuery 源代码一直与 jQuery 发布一起发布在 npm 和 GitHub 上,但无法直接作为模块导入,除非使用 RequireJS,这是 jQuery 的构建工具。我们现在已经切换到 Rollup 来打包 jQuery,并且我们单独运行所有测试的 ES 模块。

Trusted Types 和 CSP

jQuery 4.0 添加了对 Trusted Types 的支持,确保包装在 TrustedHTML 中的 HTML 可以用作 jQuery 操作方法输入的输入,而不会违反 require-trusted-types-for 内容安全策略指令。

与此同时,虽然一些 AJAX 请求已经使用 <script> 标签来维护诸如 crossdomain 之类的属性,但我们已经 将大多数异步脚本请求切换为使用 <script> 标签,以避免因使用内联脚本而引起的任何 CSP 错误。仍然存在一些使用 XHR 进行异步脚本请求的情况,例如当传递 "headers" 选项时(改用 scriptAttrs!),但我们现在尽可能使用 <script> 标签。

更新精简版构建

在 jQuery 4.0.0 中,精简版本变得更小了,移除了 Deferreds 和 Callbacks(现在 gzip 压缩后低于 20k 字节!)。Deferreds 长期以来一直支持 Promises A+ 标准,因此在大多数情况下可以使用原生 Promises 代替,并且它们在 jQuery 的所有受支持的浏览器中都可用。Deferreds 具有原生 Promises 不支持的一些额外功能,但大多数用法可以迁移到 Promise 方法。如果您需要支持 IE11,最好使用主版本或为原生 Promises 添加 polyfill。

下载

您可以从 jQuery CDN 获取文件,或直接链接到它们

https://code.jquery.com/jquery-4.0.0-beta.js

https://code.jquery.com/jquery-4.0.0-beta.min.js

您也可以从 npm 获取此版本

npm install jquery@4.0.0-beta

精简版

有时您不需要 ajax,或者更喜欢使用许多独立的专注于 ajax 请求的库。而且,通常使用 CSS 和类操作进行 Web 动画更简单。最后,所有 jQuery 支持的浏览器(IE11 除外)现在都支持本机 Promises,因此在大多数情况下不再需要 Deferreds 和 Callbacks。除了包含所有内容的常规 jQuery 版本之外,我们还发布了一个排除这些模块的“精简”版本。这些天 jQuery 的大小很少成为加载性能问题,但精简版本比常规版本小约 8k gzip 字节。这些文件也可用在 npm 包和 CDN 上

https://code.jquery.com/jquery-4.0.0-beta.slim.js

https://code.jquery.com/jquery-4.0.0-beta.slim.min.js

这些更新已经作为 npm 和 Bower 上的当前版本提供。有关获取 jQuery 的所有方式的信息,请访问 https://jqueryjs.cn/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, 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 团队。

我们在 Mastodon 上!

jQuery 现在拥有自己的 Mastodon 帐户。从现在开始,我们将同时在 Twitter 和 Mastodon 上发布内容。您可能还对关注一些拥有 Mastodon 帐户的团队成员感兴趣。

jQuery: https://social.lfx.dev/@jquery

mgol: https://hachyderm.io/@mgol

timmywil: https://hachyderm.io/@timmywil

变更日志

完整变更日志: 4.0.0-beta

Ajax

  • 不要将数组数据视为二进制数据 (992a1911)
  • 即使对于二进制数据,也允许 `processData: true` (ce264e07)
  • 支持二进制数据(包括 FormData)(a7ed9a7b)
  • 支持带有 headers 的脚本传输,即使是跨域请求 (#5142, 6d136443)
  • 支持 `jQuery.get` 中成功函数的 `null` 值 (#4989, 74978b7e)
  • 除非提供了 dataType,否则不要自动执行脚本 (#4822, 025da4dd)
  • 使 responseJSON 适用于错误的同域 JSONP 请求 (68b4ec59)
  • 执行 JSONP 错误脚本响应 (#4771, a1e619b0)
  • 避免异步请求的脚本传输中的 CSP 错误 (#3969, 07a8e4a1)
  • 放弃 json 到 jsonp 的自动提升逻辑 (#1799, #3376, e7b3bc48)
  • 如果存在 content-type 标头值,则覆盖 s.contentType (#4119, 7fb90a6b)
  • 弃用 AJAX 事件别名,将内联别名弃用 (23d53928)
  • 不要为不成功的 HTTP 响应执行脚本 (#4250, 50871a5a)
  • 简化 jQuery.ajaxSettings.xhr (#1967, abdc89ac)

属性

  • 减少几个字节 (b40a4807)
  • 不要在 setter 中将属性字符串化 (#4948, 4250b628)
  • 移除 `toggleClass(boolean|undefined)` 签名 (#3388, a4421101)
  • 重构 val(): 不要剥离回车符,隔离 IE 解决方法 (ff281991)
  • 不在 IE 之外设置 type attr hook (9e66fe9a)

构建

  • 设置定期代码扫描分析 (39c5778c)

构建

  • 将 grunt 作者迁移到自定义脚本 (af79c999)
  • 将 follow-redirects 从 1.15.1 升级到 1.15.4 (56139394)
  • 升级 actions/setup-node 和 github/codeql-action (99151d7a)
  • 重新格式化 GitHub workflow Yaml 文件 (c98597ea)
  • 升级 @babel/traverse 和多个 actions (fb0cc272)
  • 不要为 dependabot 分支运行 CI push 工作流 (635cb152)
  • 更新 ESLint 相关包,修复 linting 错误 (f47c6a83)
  • 在 npm 脚本中运行 pretest 之前运行 pretest (* (1ad66aeb)
  • 对 compare_size 中的分支进行排序;最后运行的排在最后 (a7fa303f)
  • 在 jenkins 脚本中运行 pretest (cb763072)
  • 修复 Node 20 中不一致的构建 (7ef9099d)
  • 在比较中添加提交 SHA 和最后运行时间 (09972bcc)
  • 将新的 factory 文件添加到 dist eslint (79223841)
  • 升级 qs、socket.io-parser、socket.io 和 json5 (b923047d)
  • 将大多数 grunt 任务迁移到 grunt 之外 (2bdecf8b)
  • 升级 actions/checkout、actions/setup-node 和 github/codeql-action (42e50f8c)
  • 更新 Krinkle 的 mailmap 条目 (699bcd39)
  • 在压缩期间将 CRLF 替换为 LF (48cc402a)
  • 向 package.json 添加 `exports`,导出 slim 和 esm 构建 (#4592, 8be4c0e4)
  • 切换到 SWC 进行 JS 压缩,而不是 Terser (#5286) (#5285, e2421875)
  • 确保 `*.cjs` 和 `*.mjs` 文件也使用 UNIX 行尾 (198b41c8)
  • 切换 timmywil 的首选电子邮件 (2b6b5e0a)
  • 升级 github/codeql-action 和 actions/checkout (4a13266e)
  • 删除单个 AMD 模块 (5701957b)
  • 通过提交 SHA 引用 GitHub Actions (#5266, 784b9ba6)
  • 将 minifier 从 UglifyJS 切换到 Terser (27303c6b)
  • 使 `eslint:dev` 任务不 lint `dist/` 文件夹 (44906a83)
  • 在 Node.js 20 上进行测试,停止在 Node.js 14 和 19 上进行测试 (6616acff)
  • 仅在需要时安装 Playwright 依赖项 (e77bd9d6)
  • 将 actions/setup-node 从 3.5.1 升级到 3.6.0 (7e7bd062)
  • 在 GitHub Action 浏览器测试上运行 Playwright WebKit (b02a257f)
  • 将 middleware-mockserver 迁移到现代 JS (ce90a484)
  • 删除自定义构建中过时的 Insight 包 (c66d4700)
  • 限制 GitHub 工作流的权限 (c909d6b1)
  • 在 Node.js 18 和 19 上进行测试,停止在 Node 12 上进行测试 (f62d8e21)
  • 将 actions/setup-node 从 3.5.0 升级到 3.5.1 (0208224b)
  • 更新 Grunt 从 1.4.1 到 1.5.3 (aa231cd2)
  • 将 actions/setup-node 从 3.4.1 升级到 3.5.0 (25400750)
  • 更新 GitHub Actions (52f452b2)
  • 添加 dependabot.yml 配置 (GitHub Actions) (3f8bb2a4)
  • 在 Node 17 上进行测试,更新 Grunt 和 `karma-*` 包 (2525cffc)
  • 在 GitHub Actions 中将安装步骤与运行测试分开 (eef97250)
  • 删除 travis.yml 和核心中的 travis 提及 (#4983) (5f4d449a)
  • 迁移到 GitHub Actions (e23190e6)
  • 更新 ESLint 和 eslint-plugin-import,修复构建 (9735edd5)
  • 在 Node.js 16 上进行测试,而不是 15 (0f623fdc)
  • 从外部目录获取 core-js-bundle (345cd22e)
  • 恢复外部目录 (a684e6ba)
  • 在整个存储库中将 master 重命名为 main (8ae477a4)
  • 在 Node.js 15 上进行测试 (6984d174)
  • 明确排除 slim 构建中的 queue 模块 (a503c691)
  • 使 import/no-unused-modules ESLint 规则在 WebStorm 中工作 (8612018d)
  • 将 .eslintignore 路径附加到 grunt eslint 路径 (a22b43ba)
  • 使用“favor”的美国拼写 (fa0058af)
  • 修复 commitplease husky 配置 (#4735, 3a1b338a)
  • 更新依赖项 (b5028669)
  • 事件:确保使用所有源模块的导出 (#4648) (40c3abd0)
  • 更新 eslint-config-jquery,修复 linting 违规 (ef4d6ca6)
  • 在引入通过 Rollup 编译的 ES 模块后的后续操作 (55cd3a44)
  • 根据 jQuery 风格指南更正代码缩进 (3d62d570)
  • 减少 slim 构建的标题注释和 jQuery.fn.jquery (812b4a1a)
  • 将 ESLint max-len disable-directive 移动到 dist/.eslintrc.json (34296ec5)
  • 在 Node.js 14 上进行测试,停止在 Node.js 8 和 13 上进行测试 (88eb22e0)
  • 在 ESLint 中启用 reportUnusedDisableDirectives (46f9810b)
  • 解决 Travis 配置警告 (5b94a4f8)
  • 为浏览器代码中的 var 声明启用 ESLint one-var 规则 (4a7fc854)
  • 将 Christian Oliff 添加到 .mailmap 和 AUTHORS.txt (721744a9)
  • lint 压缩的 jQuery 文件,以及一个 Gruntfile 修复 (#3075, 338f1fc7)
  • lint 压缩的 jQuery 文件 (#3075, 89a18de6)
  • 为 Travis 作业添加直观的名称 (e1fab109)
  • 使 Karma 在 ES 模块模式下工作,从磁盘提供源文件 (437f389a)
  • 测试:修复自定义构建测试,在 Travis 上验证 (0f780ba7)
  • 创建一个 `grunt custom:slim` 别名用于 Slim 构建 (#4578) (9b9ed469)
  • 使 Karma 在 ES 模块模式下工作 (341c6d1b)
  • 自动转换为 AMD (f37c2e51)
  • 修复 Windows 构建 (#4548, 9fd2fa53)
  • 需要 ES6 导入的扩展名,防止导入循环 (44ac8c85)
  • 修复 ajax.js 中对 serialize.js 的导入路径 (07532014)
  • 仅在 Travis 上定义的浏览器中运行测试 (bcbcdd2b)
  • 在 Firefox ESR 上运行测试 (2d5ad6d2)
  • 除了 8、10 和 12 之外,还在 Node.js 13 上运行测试 (830976e6)
  • 在 Travis 上使用 FirefoxHeadless 运行测试 (584835e6)
  • 通过 ESLint 要求 Node.js 脚本使用严格模式 (bbad821c)
  • 支持 jquery-release –dry-run 标志 (d7d0b52b)
  • 停止在发布时将 src/core.js 复制到 dist (#4489, 9a4d9806)
  • 移除 external 目录,直接从 node_modules 读取 (d7e64190)
  • ESLint:禁止使用未使用的函数参数 (438b1a3e)
  • 修复 AMD 模块的正则表达式解析 (#4389) (9ec09c3b)
  • 修复 curCSS 中的 AMD 依赖项 (b220f6df)
  • 在 Node.js 12 上测试,停止在 Node.js 6 和 11 上测试 (b8d47128)
  • 修复 finalPropName 中的未解析 jQuery 引用 (#4358, 87403058)
  • 将 Sizzle 从 2.3.3 更新到 2.3.4 (#1756, #4170, #4249, 0b2c36ad)
  • 将 master 版本更新到 4.0.0-pre (c4f2fa2f)
  • 将 Sinon 从 2.3.7 更新到 7.3.1,其他更新 (fea7a2a3)

核心

  • 添加有关命名导出的更多信息 (5f869590)
  • 简化浏览器支持减少后的代码 (93ca49e6)
  • 将工厂移动到单独的导出 (46f6e3da)
  • 在 `src/` 中使用命名导出 (#5262, f75daab0)
  • 修复 HTMLDocument 对象上 jQuery.text() 的回归 (#5264, a75d6b52)
  • 选择器:将 jQuery.contains 从选择器移动到核心模块 (024d8719)
  • 移除 jQuery.fn.init 的根参数 (d2436df3)
  • 不要依赖 splice 存在于输入中 (9c6f64c7)
  • 操作:添加基本的 TrustedHTML 支持 (#4409, de5398a6)
  • 报告 parseXML 中的浏览器错误 (#4784, 89697325)
  • 使 jQuery.isXMLDoc 接受 falsy 输入 (#4782, fd421097)
  • 停止支持 Edge Legacy(即非 Chromium Microsoft Edge) (#4568, e35fb62d)
  • 在 iframe 上下文中触发 iframe 脚本,在 globalEval 中添加 doc 参数 (#4518, 4592595b)
  • 在精简版本中排除 callbacks & deferred 模块 (fbc44f52)
  • 迁移到 ES 模块 🎉 (d0ce00cd)
  • 在支持的地方使用 Array.prototype.flat (#4320, 9df4f1de)
  • 移除 jQuery 原型上的 push、sort & splice 的私有副本 (b59107f5)
  • 实现 .even() & .odd() 以替换 POS :even & :odd (78420d42)
  • 弃用 jQuery.trim (#4363, 5ea59460)
  • 移除 IE 特定的支持测试,依赖 document.documentMode (#4386, 3527a384)
  • 停止支持 IE <11、iOS <11、Firefox <65、Android Browser & PhantomJS (#3950, #4299, cf84696f)
  • 移除已弃用的 jQuery API (#4056, 58f0c00b)

CSS

  • 修复最初隐藏的 iframe 的 reliableTrDimensions 支持测试 (b1e66a5f)
  • 选择器:与 3.x 对齐,移除外部 `selector.js` 包装器 (53cf7244)
  • 使 reliableTrDimensions 支持测试与 Bootstrap CSS 协同工作 (#5270, 65b85031)
  • 使 `offsetHeight( true )` 等包含负边距 (#3982, bce13b72)
  • 对于仅包含空格的 CSS 变量值返回 `undefined` (#5120) (7eb00196)
  • 不要修剪未定义的自定义属性的空格 (ed306c02)
  • 跳过 `addClass( array )` 中的假值,压缩代码 (#4998, a338b407)
  • 证明在 CSS 属性值上使用 rtrim 的合理性 (655c0ed5)
  • 修剪 CSS 自定义属性值周围的空格 (#4926, efadfe99)
  • 在 jQuery slim 构建中包含 `show`、`hide` 和 `toggle` 方法 (297d18dd)
  • 移除 opacity CSS hook (865469f5)
  • 解决 IE/Edge 中表行上 getComputedStyle 的错误 (4490, 26415e08)
  • 不要自动将“px”添加到少数例外情况下的属性 (#2795, 00a9c2e5)

数据

  • 重构以减小尺寸 (805cdb43)
  • 事件:操作:防止与 Object.prototype 发生冲突 (3256, 9d76c0b1)
  • 分离 data & css/effects camelCase 实现 (3355, 8fae2120)

Deferred

  • 将 `getStackHook` 重命名为 `getErrorHook` (#5201, 258ca1ec)
  • 尊重 jQuery.Deferred.exceptionHook 中的 source maps (#3179, 0b9c5037)
  • 将 master 重命名为 primary (a32cf632)

已弃用

  • 使用非弃用方法定义 `.hover()` (fd6ffc5e)
  • 移除 jQuery.trim (0b676ae1)
  • 修复 AMD 参数顺序 (f810080e)

Dimensions

  • 为不可靠的 TR 尺寸添加偏移量属性回退 (4529, 3bbbc111)

文档

  • 修复程序包 README 中的模块链接 (ace646f6)
  • 更新 CONTRIBUTING.md 中的 watch 任务 (77d6ad71)
  • 修复 codespell 发现的错别字 (620870a1)
  • 移除过时的 gitter 徽章 (67cb1af7)
  • 从 PR 模板中移除“Grunt 构建”部分 (988a5684)
  • 移除 README 中的过时徽章 (bcd9c2bc)
  • 更新已发布程序包的 README (edccabf1)
  • 移除来自 GitHub Actions 注释中的 git.io (016872ff)
  • 更新 README 中的 webpack 网站 (01819bc3)
  • 添加指向 patchwelcome 和 help wanted issue 的链接 (924b7ce8)
  • 添加指向预览新 CLA 的链接 (683ceb8f)
  • 修复不正确的 `trac-NUMBER` 引用 (eb9ceb2f)
  • 移除旧 jquery 源代码中的过期链接 (#4997) (ed066ac7)
  • 移除来自源代码的 Web Archive 链接 (#4981, e24f2dcf)
  • 将 `#NUMBER` Trac 问题引用替换为 `trac-NUMBER` (5d5ea015)
  • 更新 CONTRIBUTING.md 中最新的 jQuery 构建的 URL (9bdb16cd)
  • 移除拉取请求模板中的 CLA 复选框 (e1248931)
  • 更新 IRC 到 Libera 并修复 LAMP 死链接 (175db73e)
  • 更新 GitHub issue 模板中的“频繁报告的问题” (7a6fae6a)
  • 将 JS Foundation 提及更改为 OpenJS Foundation (11611967)
  • 添加 SECURITY.md,显示安全电子邮件地址 (2ffe54ca)
  • 修复错别字 (1a7332ce)
  • 更新 jsdom 仓库的链接 (a62309e0)
  • 将超链接使用 https (73415da2)
  • 移除 README 中 event/alias.js 模块的提及 (3edfa1bc)
  • 将指向 EdgeHTML issue 的链接通过 Web Archive (1dad1185)
  • 将用户引导至 GitHub 文档以克隆仓库 (f1c16de2)
  • 将 README 中的 OS X 更改为 macOS (5a3e0664)
  • 将大多数 URL 更新为 HTTPS (f09d9210)
  • 将指向 Homebrew 的链接从 HTTP 转换为 HTTPS (e0022f23)

效果

  • 修复 .stop() 中的不必要的条件语句 (#4374, 110802c7)

Effects

  • 移除 jQuery.fx.interval (6c2c7362)

事件

  • 避免 jQuery.event.special 与 Object.prototype 之间的冲突 (bcaeb000)
  • 简化 leverageNative 中已保存数据的检查 (dfe212d5)
  • 使 trigger(focus/blur/click) 与原生处理程序协同工作 (#5015, 6ad3651d)
  • 通过 focusin/focusout 在 IE 中模拟 focus/blur (#4856, #4859, #4950, ce60d318)
  • 不要在 `.on(focus).off(focus)` 之后中断 focus 触发 (#4867, e539bac7)
  • 不要让 focus 重新触发将焦点移回原始元素 (#4382, dbcffb39)
  • 不要在元素在 blur 时被移除时崩溃 (#4417, 5c2d0870)
  • 移除 event.which shim (#3235, 1a5fff4c)
  • 移除 jQuery.event.global (18db8717)
  • 仅将事件附加到接受数据的对象 – 真正地 (#4397, d5c505e3)
  • 停止兼容 focusin & focusout 事件 (#4300, 8a741376)
  • 防止 leverageNative 注册重复的虚拟处理程序 (eb6c0a7c)
  • 修复处理多个异步焦点事件的问题 (#4350, ddfa8376)

操作

  • 泛化一个测试以支持 IE (88690ebf)
  • 支持 $el.html(selfRemovingScript) (#5378) (#5377, 937923d9)
  • 将 domManip 提取到单独的文件 (ee6e8740)
  • 不要从脚本中移除 HTML 注释 (#4904, 2f8f39e4)
  • 在 DOM 操作中尊重脚本的 crossorigin 属性 (#4542, 15ae3614)
  • 避免在 buildFragment 中连接字符串 (9c98e4e8)
  • 使 jQuery.htmlPrefilter 成为一个恒等函数 (90fed4b4)
  • 选择器:尽可能使用 nodeName 工具来节省大小 (4504fc3d)

发布

  • 直接使用 buildDefaultFiles 并传递版本 (b507c864)
  • 复制 dist-module 文件夹 (63767650)
  • 仅将已发布版本的文件发布到 cdn (3a0ca684)
  • 移除 dist package.json 中的脚本和开发依赖项 (7eac932d)
  • 更新 Release.generateArtifacts 中的构建命令 (3b963a21)
  • 添加对 Windows 中 md5 总和的支持 (f088c366)
  • 移除全局安装 grunt 的需要 (b2bbaa36)
  • 更新发布依赖项 (967af732)
  • 移除未使用的 chalk 依赖项 (bfb6897c)
  • 使用仓库中的 dist README fixture (358b769a)
  • 更新 AUTHORS.txt (1b74660f)
  • 更新 AUTHORS.txt (cf9fe0f6)

选择器

  • 使 `selector.js` 模块依赖于 `attributes/attr.js` (#5379, e06ff088)
  • 消除来自各种模块的 `selector.js` 依赖项 (e8b7db4b)
  • 重新暴露 jQuery.find.{tokenize,select,compile,setDocument} (#5259, 338de359)
  • 停止依赖 CSS.supports( “selector(…)” ) (#5194, 68aa2ef7)
  • 将 jQuery 选择上下文逻辑回移植到 selector-native (#5185, 2e644e84)
  • 使选择器列表再次与 `qSA` 协同工作 (#5177, 09d988b7)
  • 实现 `uniqueSort` 可链式方法 (#5166, 5266f23c)
  • 重新引入 selector-native.js (4c1171f2)
  • 操作:修复模板内容中的 DOM 操作 (#5147, 3299236c)
  • 放弃对遗留伪类的支持,测试自定义伪类 (8c7da22c)
  • 如果 `CSS.supports(selector(…))` 不兼容,则使用 jQuery `:has` (#5098, d153c375)
  • 移除 Chrome <=77 的“a:enabled”解决方法 (c1ee33ad)
  • 使空属性选择器再次在 IE 中工作 (#4435, 05184cc4)
  • 在 uniqueSort 中使用浅层文档比较 (#4441, 15750b0a)
  • 添加一个测试,用于在逗号后的无效选择器上抛出错误 (6eee5f7f)
  • 使带有前导组合器的选择器再次使用 qSA (ed66d5a2)
  • 使用浅层文档比较以避免 IE/Edge 崩溃 (#4441, aa6344ba)
  • 减小大小,简化 setDocument (29a9544a)
  • 尽可能利用 :scope 伪类 (#4453, df6a7f7f)
  • 恢复 querySelectorAll 快捷方式的使用 (cef4b731)
  • 将 Sizzle 内联到选择器模块 (47835965)
  • 将 Sizzle 测试移植到 jQuery (79b74e04)

支持

  • 确保支持 div 的显示设置为 block (#4832, 09f25436)

Tests

  • 禁用“:lang 尊重转义的反斜杠”测试 (#5271, 62b9a258)
  • 指示 Chrome 112 和 Safari 16.4 通过 cssHas 支持测试 (89ef81f8)
  • 正确测试 AJAX 已弃用的事件别名 (cff28998)
  • 指示 Firefox 106+ 通过 `cssSupportsSelector` 测试 (716130e0)
  • 移除 Firefox XML 解析问题的一个兼容处理 (e7ffe1f1)
  • 修复 QUnit CSS 文件的链接 (8cf39b78)
  • 根据编译标志而不是 API 存在性排除测试 (#5069, fae5fee8)
  • 兼容 Firefox 中的 XML 解析错误 (af1cd6f2)
  • 将 colors 版本锁定到 1.4.0 (9603b3c8)
  • 跳过 TestSwarm 上的 ETag AJAX 测试 (00c060d1)
  • 允许 statusText 在 AJAX 测试中为“success” (19ced963)
  • 使 Karma 浏览器超时时间大于 QUnit 的超时时间 (4fd6912b)
  • 不要在 mock.php 的 cspClean 操作中移除 csp.log (1019074f)
  • 通过 HTTPS 加载 TestSwarm 监听器 (d225639a)
  • 将背景图像从在线文件切换到本地 1×1.jpg (482f8462)
  • 从 mock.php 中移除非典型的回调参数字符 (a7027463)
  • 让更多测试在 Chrome 和 Firefox 中原生运行 (50e8e846)
  • 修复缺少 dataType 时脚本无法自动执行的测试 (d38528b1)
  • 识别 Node.js 模拟服务器中带有句点的回调函数 (df6858df)
  • 在 Safari 中跳过“jQuery.ajax() 在卸载时”测试 (c18dc496)
  • 移除一个未使用的局部变量 (82b87f6f)
  • 移除剩余的过时 jQuery.cache 引用 (d96111e1)
  • 解决 iOS 8 – 12 中最近的 XSS 测试中的失败 (11066a9e)
  • 添加针对最近修复的操纵 XSS 问题的测试 (dc06d68b)
  • 仅对匹配的窗口和文档使用一个 focusin/out 处理程序 (9b732043)
  • 修复“jQuery.ajax() – JSONP – 同域”测试中的不稳定性 (7b0864d0)
  • 将必要的 done() 调用传递给 assert.async() (364476c3)
  • 移除过时的 jQuery 数据测试 (eb35be52)
  • 在 Firefox 中跳过“表格行上宽度/高度,具有幻影边框”测试 (a612733b)
  • 不要在 Chrome 中测试卸载时的同步 XHR (323575fb)
  • 停止在测试中使用 jQuery.find (1d624c10)
  • 移植 Sizzle 中的更改 (ac5f7cd8)
  • 修复 testinit.js 中的注释 (7bdf307b)
  • 更新 npo.js 并包含未压缩的源代码 (b334ce77)
  • 将事件测试的回退限制为 TestSwarm (bde53edc)
  • 修复 IE 中的新 focusin/focusout 测试 (6f2fae7c)
  • 修复 core-js polyfill 的包含方法 (2e4b79ab)

Traversing

  • 修复 IE 中带有子元素的 <object> 上的 `contents()` (ccbd6b93)
  • 修复带有子元素的 <object> 上的 `contents()` (#4384, 4d865d96)

jQuery 3.7.1 发布:可靠的表格行尺寸

发布于 作者

jQuery 3.7.1 已发布!此版本修复了 jQuery 3.6.0 中的一个回归问题,该问题导致 Chrome 和 Safari 中 <tr /> 元素的尺寸四舍五入。此外,一个(主要)内部的 Sizzle 方法 jQuery.find.tokenize,原本在 jQuery 对象上,在我们在 jQuery 3.7.0 中移除 Sizzle 时被意外移除。该方法已恢复。

像往常一样,该版本可在 我们的 cdn 和 npm 包管理器上获取。其他第三方 CDN 可能也会很快提供,但请记住,我们无法控制他们的发布计划,他们需要一些时间。以下是 jQuery 3.7.1 的亮点。

表格行支持测试

jQuery 3.6.0 引入了一项更改,用于支持测试,以应对 Firefox 的突然故障,Firefox 开始在 <tr /> 元素的计算尺寸中包含表格边框。这 可能实际上是正确的,但 Firefox 是唯一这样做的一个浏览器。然而,新的支持测试没有考虑到 CSS 中包含 * { box-sizing: border-box; } 的页面。因此,在所有浏览器中的这些页面上,支持测试都失败了。结果是回退到使用 outerWidthouterHeight,不幸的是,它不会返回小数。支持测试现已修复,Chrome 和 Safari 的先前行为已恢复,但 Firefox 和 IE 将继续返回整数。

重新暴露 Sizzle 中的方法

jQuery 在 jQuery 3.7.0 中内联了 Sizzle 的大部分代码,为未来 jQuery 选择器引擎的更大更改做准备。在大多数情况下,没有功能上的变化,但我们意外地私有化了一个原本是公开的方法。虽然 jQuery.find.tokenize 没有文档,但一些代码依赖于它可用。该方法现已恢复。

升级

我们预计从 jQuery 3.0+ 版本升级时不会出现兼容性问题。要升级,请查看新的 3.5 升级指南。如果您尚未升级到 jQuery 3+,请先查看 3.0 升级指南

jQuery Migrate 插件 将帮助您识别代码中的兼容性问题。请尝试这个新版本,并 告知我们您遇到的任何问题

如果您还无法升级到 3.5+,Daniel Ruf 已经提供了 先前 jQuery 版本的补丁

下载

您可以从 jQuery CDN 获取文件,或直接链接到它们

https://code.jquery.com/jquery-3.7.1.js

https://code.jquery.com/jquery-3.7.1.min.js

您也可以从 npm 获取此版本

npm install jquery@3.7.1

精简版

有时您不需要 ajax,或者您更喜欢使用许多专注于 ajax 请求的独立库。而且,通常使用 CSS 和类操作进行 Web 动画更简单。除了包含 ajax 和效果模块的常规 jQuery 版本之外,我们还发布了一个“精简”版本,该版本排除了这些模块。如今,jQuery 的大小很少成为加载性能问题,但精简版本比常规版本小约 6k 压缩字节。这些文件也可用在 npm 包和 CDN 上

https://code.jquery.com/jquery-3.7.1.slim.js

https://code.jquery.com/jquery-3.7.1.slim.min.js

这些更新已经作为 npm 和 Bower 上的当前版本提供。有关获取 jQuery 的所有方式的信息,请访问 https://jqueryjs.cn/download/。公共 CDN 今天会收到其副本,请给它们几天时间来发布文件。如果您急于开始,请使用我们 CDN 上的文件,直到它们有机会更新为止。

感谢

感谢所有参与此版本发布的人员,包括提交补丁、报告错误或测试的人员,包括 Gabriela GutierrezMichal Golebiowski-OwczarekTimo TijhofDimitri Papadopoulos Orfanos 和整个 jQuery 团队。

我们在 Mastodon 上!

jQuery 现在拥有自己的 Mastodon 帐户。从现在开始,我们将同时在 Twitter 和 Mastodon 上发布内容。您可能还对关注一些拥有 Mastodon 帐户的团队成员感兴趣。

jQuery: https://social.lfx.dev/@jquery

mgol: https://hachyderm.io/@mgol

timmywil: https://hachyderm.io/@timmywil

变更日志

完整变更日志: 3.7.1

构建

  • 在 `grunt` 上生成精简版本并对其运行 `compare_size` (763ade6d)
  • 确保 `*.cjs` 和 `*.mjs` 文件也使用 UNIX 换行符 (3c18c1f3)
  • 切换 timmywil 的首选电子邮件 (72ae577c)
  • 构建:将 actions/checkout 从 3.5.2 升级到 3.5.3 (a370d7df)
  • 通过提交 SHA 引用 GitHub Actions (#5266, 0ea85dad)
  • 在 Node.js 20 上测试,停止在 Node.js 14 和 19 上测试 (b473729d)
  • 将 3.x-stable 版本更新到 3.7.1-pre. (64460dac)

核心

  • 修复 HTMLDocument 对象上 jQuery.text() 中的回归问题 (#5264, 44c56f87)

CSS

  • 使可靠的 trDimensions 支持测试与 Bootstrap CSS (3.x 版本) 协同工作 (#5270, a288838c)

已弃用

  • 使用非弃用的方法定义 `.hover()` (7287894f)

文档

  • 修复 codespell 发现的错别字 (4a29888c)
  • 删除 readme 中的过时的 gitter 徽章 (141518e9)
  • 删除 PR 模板中的“Grunt 构建”部分 (992a6653)

发布

选择器

  • 仅在 IE 和 Edge Legacy 中附加 unload 处理程序 (#5281, 87467a6f)
  • 重新暴露 jQuery.find.tokenize (3.x 版本) (#5259, 13a870b6)

Tests

  • 禁用“:lang 尊重转义反斜杠”测试 (#5271, 5aa7d93a)
  • 跳过 IE 9 中的新 `.text()` 测试 (b84146ce)

jQuery 3.7.0 发布:保持秩序

发布于 作者

jQuery 3.7.0 现已发布!此版本包含所有内容:错误修复、新方法和性能改进!我们甚至放弃了长期使用的选择器引擎:Sizzle。或者说,我们将它移到了 jQuery 中。jQuery不再依赖于 Sizzle 作为单独的项目,而是直接将它的代码放入 jQuery 核心。这有助于我们为未来 jQuery 版本中选择的重大更改做好准备。现在这可能意义不大,但 jQuery 确实减少了几个字节,因为 Sizzle 支持甚至比 jQuery 更旧的浏览器。顺便说一下,我们计划归档 Sizzle,但我们将在未来的博客文章中提供更多详细信息。

像往常一样,该版本可在 我们的 CDN 和 npm 包管理器上获取。其他第三方 CDN 也可能很快提供它,但请记住,我们无法控制它们的发布计划,它们需要一些时间。以下是 jQuery 3.7.0 的亮点。

新方法:.uniqueSort()

一些 API,例如 .prevAll(),以相反的顺序返回元素,这在使用包装方法时可能会导致一些令人困惑的行为。例如,

$elem.prevAll().wrapAll("<p/>")

以上代码会将所有元素按预期包装起来,但会将这些元素以相反的顺序写入 DOM。为了以一种防止破坏现有代码的方式解决这个问题,我们已经记录了 .prevAll() 和类似方法返回反向顺序的集合,这在许多情况下仍然是可取的。但我们还添加了一个新方法来使事情更轻松:一个可链的 .uniqueSort(),它执行现有的但静态的 jQuery.uniqueSort()

因此,我们之前的示例将变为

$elem.prevAll().uniqueSort().wrapAll("<p/>")

并且 DOM 中的元素顺序将保持不变。

添加了一些无单位的 CSS 属性

jQuery 3.7.0 增加了对更多 CSS 属性的支持,这些属性在设置时无需自动添加“px”单位。例如,.css('aspect-ratio', 5) 将导致 CSS aspect-ratio: 5px;。总而言之,我们添加了七个额外的属性,并且我们从 React 那里获得了一些列表帮助。谢谢 React!

值得注意的是,jQuery 4.0 将改变我们处理无单位 CSS 属性的方式。与其依赖于要避免添加 "px" 的 CSS 属性列表,我们将改为拥有一个要向其中明确添加 "px" 的属性列表,当没有传递单位时。这应该更具未来兼容性。

操作方面的性能改进

jQuery 3.7.0 在使用 .append() 等操作方法时,对于某些用例来说,具有可衡量的性能改进。当我们删除了对我们不再支持的浏览器的支持测试时,这意味着对文档更改的检查不再需要运行。本质上,这导致了 0% 到 100% 之间的加速。最显著的加速将出现在一些罕见的情况下,用户频繁地在不同的文档之间切换上下文,也许是通过在多个 iframe 上运行操作。

outerHeight(true) 中的负边距

在 jQuery 3.3.0 中,我们修复了一个问题,以便在 .innerWidth().innerHeight() 的计算中包含滚动条。但是,该修复没有考虑到负边距,这意味着 .outerWidth(true).outerHeight(true) 不再尊重负边距。我们在 3.7.0 中通过将边距计算与滚动条调整分离来修复了这个问题。

在 IE 中使用不同的原生 focus 事件

focus 和 blur 事件可能是 jQuery 需要跨浏览器处理的最复杂的事件。jQuery 3.4.0 在修复 focus 事件传递问题时引入了一些小的回归。我们终于能够 关闭所有这些 issue 在 jQuery 3.7.0 中!

但是,我们需要指出 IE 中可能出现的破坏性更改。在所有版本的 IE 中,focus & blur 事件都是异步触发的。在所有其他浏览器中,这些事件都是同步触发的。IE 中的异步行为 导致 问题。解决方法是更改我们使用的原生事件。幸运的是,focusin & focusout 在 IE 中同步运行,因此我们现在通过 focusinfocusout 模拟 focusblur 在 IE 中。这一改变使我们能够依赖 IE 中的同步 focus 事件,从而解决了许多问题(有关完整列表,请参阅 changelog)。

如果您好奇,jQuery 5.0 将放弃对 IE 的支持,并且其中许多更改已经存在于 PR 中。

升级

我们预计从 jQuery 3.0+ 版本升级时不会出现兼容性问题。要升级,请查看新的 3.5 升级指南。如果您尚未升级到 jQuery 3+,请先查看 3.0 升级指南

jQuery Migrate 插件 将帮助您识别代码中的兼容性问题。请尝试这个新版本,并 告知我们您遇到的任何问题

如果您还无法升级到 3.5+,Daniel Ruf 已经提供了 先前 jQuery 版本的补丁

下载

您可以从 jQuery CDN 获取文件,或直接链接到它们

https://code.jquery.com/jquery-3.7.0.js

https://code.jquery.com/jquery-3.7.0.min.js

您也可以从 npm 获取此版本

npm install jquery@3.7.0

精简版

有时您不需要 ajax,或者您更喜欢使用许多专注于 ajax 请求的独立库。而且,通常使用 CSS 和类操作进行 Web 动画更简单。除了包含 ajax 和效果模块的常规 jQuery 版本之外,我们还发布了一个“精简”版本,该版本排除了这些模块。如今,jQuery 的大小很少成为加载性能问题,但精简版本比常规版本小约 6k 压缩字节。这些文件也可用在 npm 包和 CDN 上

https://code.jquery.com/jquery-3.7.0.slim.js

https://code.jquery.com/jquery-3.7.0.slim.min.js

这些更新已经作为 npm 和 Bower 上的当前版本提供。有关获取 jQuery 的所有方式的信息,请访问 https://jqueryjs.cn/download/。公共 CDN 今天会收到其副本,请给它们几天时间来发布文件。如果您急于开始,请使用我们 CDN 上的文件,直到它们有机会更新为止。

感谢

感谢所有参与此版本的人员,他们提交了补丁、报告了错误或进行了测试,包括 fecore1Michal Golebiowski-Owczarek 和整个 jQuery 团队。

我们在 Mastodon 上!

jQuery 现在拥有自己的 Mastodon 帐户。从现在开始,我们将同时在 Twitter 和 Mastodon 上发布内容。您可能还对关注一些拥有 Mastodon 帐户的团队成员感兴趣。

jQuery: https://social.lfx.dev/@jquery

mgol: https://hachyderm.io/@mgol

timmywil: https://hachyderm.io/@timmywil

变更日志

完整 changelog:3.7.0

构建

  • 仅在需要时安装 Playwright 依赖项 (212b6a4f)
  • 将 actions/setup-node 从 3.5.1 升级到 3.6.0 (582785e0)
  • 在 Playwright WebKit 上运行 GitHub Action 浏览器测试 (da7057e9)
  • 将 middleware-mockserver 迁移到现代 JS (6b2abbdc)
  • 删除自定义构建中的过时 Insight 包 (37b04d5a)

CSS

Deferred

  • 将 `getStackHook` 重命名为 `getErrorHook` (3.x 版本) (#5201, cca71186)

文档

  • 删除 README 中的过时徽章 (e062f9cb)
  • 更新 irc 到 Libera 并修复 LAMP 死链接 (e0c670e6)

事件

  • 简化 leverageNative 中保存数据的检查 (9ab26aa5)
  • 使 trigger(focus/blur/click) 与原生处理程序一起工作 (#5015, 754108fb)
  • 在 IE 中通过 focusin/focusout 模拟 focus/blur (3.x 版本) (#4856, #4859, #4950, 59f7b55b)

发布

  • 添加对 windows 中 md5 总和的支持 (3b7bf199)

选择器

  • 删除过时的注释 (14685b31)
  • 用 try-catch 包装 activeElement 访问 (3936cf3e)
  • 停止依赖 CSS.supports( “selector(…)” ) (#5194, 63c3af48)
  • 将 rcombinators 重命名为 rleadingCombinator (ac1c59a3)
  • 使选择器列表与 `qSA` 再次一起工作 (#5177, 848de625)
  • 实现可链的 `uniqueSort` 方法 (#5166, 0acbe643)
  • 将 Sizzle 内联到选择器模块:3.x 版本 (#5113) (6306ca49)

Tests

  • 指示 Chrome 112 & Safari 16.4 通过 cssHas 支持测试 (3.x 版本) (1a4d87af)
  • 修复 gh-5233 中添加的测试 (759232e5)
  • 添加 ajax 中数组数据的测试 (4837a95b)
  • 在 IE 9 中跳过 jQuery.Deferred.exceptionHook 测试 (98dd622a)
  • 正确测试 AJAX 已弃用的事件别名 (18139213)
  • 修复 Chrome 中的选择器测试 (732592c2)
  • 在 IE 9 中跳过原生 :valid 测试 (6b2094da)

jQuery 3.6.4 发布:选择器宽容性

发布于 作者:

如果您一直在关注最近的 jQuery 版本,我们会一直在努力解决浏览器中一些新的选择器最近的添加问题,特别是 :hasjQuery 3.6.3 采用的策略是使用原生的 CSS.supports 来确定是否应该将选择器直接传递给 querySelectorAll,或者通过 jQuery 的选择器引擎,就像在使用 jQuery 选择器扩展、复杂的 :not() 或其他在 jQuery 中有效但在浏览器中无效的选择器时一样。从技术上讲,这都工作得很好,但 却存在一个缺点。幸运的是,对于我们来说,这个修复 不再必要,我们可以回到以前的方式。更多信息如下。

像往常一样,该版本可在 我们的 cdn 和 npm 包管理器上获取。其他第三方 CDN 可能也会很快提供,但请记住,我们无法控制他们的发布计划,他们需要一些时间。以下是 jQuery 3.6.4 的亮点。

正确与允许之间的区别

无论您在 CSS 或 JS 中使用哪个选择器,都会涉及多个规范。有一个规范用于确定选择器是否有效(即 选择器),还有一个规范用于指导实现者如何解析选择器(即 消耗简单块的解析器算法)。解析器实现比选择器规范本身更宽容,允许诸如缺少最后一个 ] 字符的属性选择器等情况。

当我们 解决了现代浏览器中某些选择器存在的问题——特别是 :has——时,我们开始利用我们支持的大多数浏览器中可用的另一个 API——CSS.supports——来确定是否可以将选择器安全地传递给原生 querySelectorAll,或者是否需要通过 jQuery 的选择器引擎。选择器可能需要绕过 qSA 的原因有很多。它可能是 jQuery 独有的选择器扩展(:contains),jQuery 以更强大的方式支持的标准选择器(:not(complex)),或者我们知道有时会出错的选择器(:enabled:disabled)。无论是什么原因,像 :has 这样的选择器中“宽容解析”的引入使我们之前确定问题的方式变得无效,因为浏览器不再会为某些真正无效的选择器抛出错误。例如,将 :has(:contains) 传递给 querySelectorAll 时不再会抛出错误。:has(:monkey) 也是如此。CSS.supports 似乎是答案。

然而,每个解决方案都可能存在权衡。现在的问题是,根据选择器规范,技术上无效的选择器正在抛出错误。但这些相同的选择器以前工作得很好,因为解析器更宽容,缺乏更好的术语。本质上,CSS.supports 不像解析器那样宽容。

与此同时,在与规范编写者和供应商的讨论中,大家一致认为我们需要防止类似 :has 的问题再次发生。这意味着什么?这意味着我们可以回到以前的方式…… 大部分。虽然规范已经更新,但浏览器需要一些时间来更新其实现。因此,我们仍然建议将 jQuery 升级到最新版本。

升级

我们预计从 jQuery 3.0+ 版本升级时不会出现兼容性问题。要升级,请查看新的 3.5 升级指南。如果您尚未升级到 jQuery 3+,请先查看 3.0 升级指南

jQuery Migrate 插件 将帮助您识别代码中的兼容性问题。请尝试这个新版本,并 告知我们您遇到的任何问题

如果您还无法升级到 3.5+,Daniel Ruf 已经提供了 先前 jQuery 版本的补丁

下载

您可以从 jQuery CDN 获取文件,或直接链接到它们

https://code.jquery.com/jquery-3.6.4.js

https://code.jquery.com/jquery-3.6.4.min.js

您也可以从 npm 获取此版本

npm install jquery@3.6.4

精简版

有时您不需要 ajax,或者您更喜欢使用许多专注于 ajax 请求的独立库。而且,通常使用 CSS 和类操作进行 Web 动画更简单。除了包含 ajax 和效果模块的常规 jQuery 版本之外,我们还发布了一个“精简”版本,该版本排除了这些模块。如今,jQuery 的大小很少成为加载性能问题,但精简版本比常规版本小约 6k 压缩字节。这些文件也可用在 npm 包和 CDN 上

https://code.jquery.com/jquery-3.6.4.slim.js

https://code.jquery.com/jquery-3.6.4.slim.min.js

这些更新已经作为 npm 和 Bower 上的当前版本提供。有关获取 jQuery 的所有方式的信息,请访问 https://jqueryjs.cn/download/。公共 CDN 今天会收到其副本,请给它们几天时间来发布文件。如果您急于开始,请使用我们 CDN 上的文件,直到它们有机会更新为止。

感谢

感谢所有参与此版本发布的人员,包括提交补丁、报告错误或进行测试的人员,包括 Michal Golebiowski-Owczarek 和整个 jQuery 团队。

我们在 Mastodon 上!

jQuery 现在拥有自己的 Mastodon 帐户。从现在开始,我们将同时在 Twitter 和 Mastodon 上发布内容。您可能还对关注一些拥有 Mastodon 帐户的团队成员感兴趣。

jQuery: https://social.lfx.dev/@jquery

mgol: https://hachyderm.io/@mgol

timmywil: https://hachyderm.io/@timmywil

变更日志

完整变更日志: 3.6.4

构建

  • 将 Sizzle 从 2.3.9 升级到 2.3.10 (#5194, dbe09e39)
  • 将 3.6-stable 版本更新到 3.6.4-pre。(a0d68b84)

jQuery 3.6.3 发布:快速选择器修复

发布于 作者

上周,我们发布了 jQuery 3.6.2。该版本包含了一些更改,但最重要的一个解决了大多数浏览器中引入的一些新选择器(例如 :has())存在的问题。我们希望尽快发布 jQuery 3.6.3,因为有人报告了一个问题,揭示了我们最初修复方案中的一个问题。以下是更详细的信息。

像往常一样,该版本可在 我们的 CDN 和 npm 包管理器上获取。其他第三方 CDN 可能也会很快提供,但请记住,我们无法控制它们的发布计划,它们需要一些时间。以下是 jQuery 3.6.3 的亮点。

正确使用 CSS.supports

:has 出现的问题,该问题在 jQuery 3.6.2 中得到修复之后,我们开始使用 CSS.supports( "selector(SELECTOR)") 来确定将选择器直接传递给 querySelectorAll 时是否有效。当 CSS.supports 返回 false 时,jQuery 会回退到它自己的选择器引擎 (Sizzle)。显然,我们的实现存在一个错误。在 CSS.supports( "selector(SELECTOR)") 中,SELECTOR 需要是一个 <complex-selector> 而不是一个 <complex-selector-list>。例如

CSS.supports("selector(div)"); // true
CSS.supports("selector(div, span)"); // false

这意味着所有复杂的选择器列表都通过 Sizzle 而不是 querySelectorAll。这在大多数情况下并非问题,但这意味着一些浏览器中支持但 Sizzle 中不支持的第四级选择器,例如 :valid,如果它是选择器列表的一部分(例如 "input:valid, div"),将不再起作用。值得注意的是,这目前仅影响 Firefox,但随着浏览器推出对 CSS.supports 的更改,所有浏览器都会出现这种情况。

现在这已在 jQuery 3.6.3 中得到修复,并且这是此版本中唯一的实际更改。

升级

我们预计从 jQuery 3.0+ 版本升级时不会出现兼容性问题。要升级,请查看新的 3.5 升级指南。如果您尚未升级到 jQuery 3+,请先查看 3.0 升级指南

jQuery Migrate 插件 将帮助您识别代码中的兼容性问题。请尝试这个新版本,并 告知我们您遇到的任何问题

如果您还无法升级到 3.5+,Daniel Ruf 已经提供了 先前 jQuery 版本的补丁

下载

您可以从 jQuery CDN 获取文件,或直接链接到它们

https://code.jquery.com/jquery-3.6.3.js

https://code.jquery.com/jquery-3.6.3.min.js

您也可以从 npm 获取此版本

npm install jquery@3.6.3

精简版

有时您不需要 ajax,或者您更喜欢使用许多专注于 ajax 请求的独立库。而且,通常使用 CSS 和类操作进行 Web 动画更简单。除了包含 ajax 和效果模块的常规 jQuery 版本之外,我们还发布了一个“精简”版本,该版本排除了这些模块。如今,jQuery 的大小很少成为加载性能问题,但精简版本比常规版本小约 6k 压缩字节。这些文件也可用在 npm 包和 CDN 上

https://code.jquery.com/jquery-3.6.3.slim.js

https://code.jquery.com/jquery-3.6.3.slim.min.js

这些更新已经作为 npm 和 Bower 上的当前版本提供。有关获取 jQuery 的所有方式的信息,请访问 https://jqueryjs.cn/download/。公共 CDN 今天会收到其副本,请给它们几天时间来发布文件。如果您急于开始,请使用我们 CDN 上的文件,直到它们有机会更新为止。

感谢

感谢所有参与此版本发布的人员,包括提交补丁、报告错误或进行测试的人员,包括 Michal Golebiowski-Owczarek 和整个 jQuery 团队。

变更日志

完整更改日志:3.6.3

构建

  • 从自定义构建中删除过时的 Insight 包 (81d5bd17)
  • 将 3.x-stable 版本更新到 3.6.3-pre。(2c5b47c4)

选择器

jQuery 3.6.2 发布!

发布于 作者

你可能没有预料到这么快又有一个版本发布,但 jQuery 3.6.2 已经到来!此版本发布的主要动力是 Chrome 中引入了一些新的选择器。更多信息如下。

像往常一样,该版本可在 我们的 CDN 和 npm 包管理器上获取。其他第三方 CDN 可能也会很快提供,但请记住,我们无法控制他们的发布计划,他们需要一些时间。以下是 jQuery 3.6.2 的亮点。

未定义的和仅包含空白字符的 CSS 变量

jQuery 3.6.1 引入了一个小小的回归,即尝试检索不存在的自定义 CSS 属性的值(例如 $elem.css("--custom"))时会抛出错误,而不是返回 undefined。这已在 3.6.2 中修复。相关地,我们还确保仅包含空白字符的值在所有浏览器中返回相同的结果。规范要求对 CSS 变量值进行修剪,但浏览器在修剪方面并不一致。我们 现在为仅包含空白字符的值返回 undefined,使其与旧版本的 jQuery 和不同的浏览器保持一致。

.contains() 与 <template>

最近 报告了一个问题,表明 <template> 的 document 属性的 documentElement 属性设置为 null,符合规范。虽然从语义上讲,模板尚未绑定到文档,但这造成了一个不寻常的情况,尤其是在 jQuery.contains() 和任何依赖它的方法中。这包括操作和选择器方法。幸运的是,修复很简单。

不是 Ralph 搞坏了互联网

当 Chrome 最近引入了一些新的选择器,其中最重要的是 :has() 时,互联网经历了一点震动。这是一个受欢迎的补充,也是 jQuery 团队所庆祝的,但规范的更改意味着 :has() 使用了所谓的“宽容解析”。本质上,即使 :has() 的参数无效,浏览器也会返回没有结果,而不是抛出错误。这在 :has() 包含另一个 jQuery 选择器扩展(例如 :has(:contains("Item")))或包含自身(:has(div:has(a)))的情况下存在问题。Sizzle 依赖于这样的错误来知道何时信任原生 querySelectorAll 以及何时通过 Sizzle 运行选择器。曾经有效的选择器在所有 jQuery 版本中都失效了,追溯到最早的 jQuery 版本。

然而,这场小小的戏剧并没有持续太久。Chrome 团队 迅速实施了一个解决方法,以修复大多数情况下之前的 jQuery 版本。Safari 对 :has() 的实现方式略有不同,并且 没有出现相同的问题但是,仍然有一个 重要的问题 尚未解决,以确定如何在 CSS 规范本身中解决这个问题。 CSSWG 此后已 解决了该问题

jQuery 已经采取措施,以确保 任何宽容解析都不会破坏未来的 jQuery 版本,即使之前的 jQuery 版本仍然受到影响。

升级

我们预计从 jQuery 3.0+ 版本升级时不会出现兼容性问题。要升级,请查看新的 3.5 升级指南。如果您尚未升级到 jQuery 3+,请先查看 3.0 升级指南

jQuery Migrate 插件 将帮助您识别代码中的兼容性问题。请尝试这个新版本,并 告知我们您遇到的任何问题

如果您还无法升级到 3.5+,Daniel Ruf 已经提供了 先前 jQuery 版本的补丁

下载

您可以从 jQuery CDN 获取文件,或直接链接到它们

https://code.jquery.com/jquery-3.6.2.js

https://code.jquery.com/jquery-3.6.2.min.js

您也可以从 npm 获取此版本

npm install jquery@3.6.2

精简版

有时您不需要 ajax,或者您更喜欢使用许多专注于 ajax 请求的独立库。而且,通常使用 CSS 和类操作进行 Web 动画更简单。除了包含 ajax 和效果模块的常规 jQuery 版本之外,我们还发布了一个“精简”版本,该版本排除了这些模块。如今,jQuery 的大小很少成为加载性能问题,但精简版本比常规版本小约 6k 压缩字节。这些文件也可用在 npm 包和 CDN 上

https://code.jquery.com/jquery-3.6.2.slim.js

https://code.jquery.com/jquery-3.6.2.slim.min.js

这些更新已经作为 npm 和 Bower 上的当前版本提供。有关获取 jQuery 的所有方式的信息,请访问 https://jqueryjs.cn/download/。公共 CDN 今天会收到其副本,请给它们几天时间来发布文件。如果您急于开始,请使用我们 CDN 上的文件,直到它们有机会更新为止。

感谢

感谢所有参与此版本发布的人员,包括提交补丁、报告错误或进行测试的人员,包括 sashashuraAnders KaseorgMichal Golebiowski-Owczarek 和整个 jQuery 团队。

变更日志

完整变更日志: 3.6.2

CSS

  • 为仅包含空白字符的 CSS 变量值返回 undefined (#5120) (8bea1dec)
  • 不要修剪未定义的自定义属性的空白字符 (#5105, c0db6d70)

选择器

  • 操作:修复模板内容中的 DOM 操作 (#5147, 5318e311)
  • 将 Sizzle 从 2.3.7 更新到 2.3.8 (#5147, a1b7ae3b)
  • 将 Sizzle 从 2.3.6 更新到 2.3.7 (#5098, ee0fec05)

Tests

  • 删除针对 Firefox XML 解析问题的解决方法 (965391ab)
  • 使 Ajax 测试在 iOS 9 中通过 (d051e0e3)