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)),或者一个我们知道有时有 bug 的选择器(: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://jqueryjs.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 (#5194dbe09e39)
  • 将 3.6-stable 版本更新到 3.6.4-pre。(a0d68b84)