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 属性的方式。我们将不再依赖 CSS 属性列表来避免添加 "px",而是将有一个属性列表,当没有传递单位时,我们绝对想要向其中添加 "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 中使用不同的原生焦点事件

焦点和模糊事件可能是 jQuery 在跨浏览器时处理起来最复杂的事件。jQuery 3.4.0 在修复焦点事件传递的数据方面出现了一些小的回归。我们终于能够在 jQuery 3.7.0 中 关闭所有这些工单

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

如果你很好奇,IE 支持将在 jQuery 5.0 中被放弃,并且许多这些更改已经在 PR 中。

升级

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

jQuery Migrate 插件 将帮助你识别代码中的兼容性问题。请试用此新版本,并 告诉我们你遇到的任何问题

如果你无法升级到 3.5+,Daniel Ruf 已友好地为以前的 jQuery 版本提供了 补丁

下载

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

https://code.jqueryjs.cn/jquery-3.7.0.js

https://code.jqueryjs.cn/jquery-3.7.0.min.js

你也可以从 npm 获取此版本

npm install jquery@3.7.0

精简版本

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

https://code.jqueryjs.cn/jquery-3.7.0.slim.js

https://code.jqueryjs.cn/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

变更日志

完整变更日志: 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

延迟

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

文档

  • 从 README 中删除过时的徽章 (e062f9cb)
  • 将 irc 更新为 Libera 并修复 LAMP 链接失效 (e0c670e6)

事件

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

发布

  • 在 Windows 中添加对 md5 校验和的支持 (3b7bf199)

选择器

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

测试

  • 指示 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)