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://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 (#5194, dbe09e39)
  • 将 3.6-stable 版本更新到 3.6.4-pre。 (a0d68b84)

评论已关闭。