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 中同步运行,因此我们现在通过 focusin 和 focusout 模拟 focus 和 blur 在 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 上的文件,直到它们有机会更新为止。
感谢
感谢所有参与此版本的人员,他们提交了补丁、报告了错误或进行了测试,包括 fecore1、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
变更日志
完整 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
文档
事件
- 简化 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)