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.jqueryjs.cn/jquery-3.6.4.js

https://code.jqueryjs.cn/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.jqueryjs.cn/jquery-3.6.4.slim.js

https://code.jqueryjs.cn/jquery-3.6.4.slim.min.js

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

评论已关闭。