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;。总的来说,我们添加了 7 个属性,并且我们从 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 中依赖同步焦点事件,从而解决了大量问题(请参阅变更日志以获取完整列表)。

如果你好奇,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.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 和类操作组合来实现网页动画通常更简单。除了包含 ajax 和效果模块的 jQuery 正式版本,我们还发布了一个“精简”版本,它不包含这些模块。如今,jQuery 的大小很少会成为加载性能问题,但精简版本比正式版本小约 6k 压缩字节。这些文件也可以在 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)

评论已关闭。