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)

评论已关闭。