如果您一直在关注最近的 jQuery 版本,我们一直在努力解决浏览器中最近添加的一些新选择器,特别是 :has
。jQuery 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