jQuery 3.6.3 发布:快速选择器修复

发布日期: 作者:

上周,我们发布了 jQuery 3.6.2。该版本中有一些更改,但最重要的是解决了大多数浏览器中引入的一些新选择器(如:has())的问题。我们希望快速发布 jQuery 3.6.3,因为已报告了一个问题,该问题揭示了我们原始修复程序存在问题。以下将详细介绍该问题。

与往常一样,该版本可以在我们的 cdn 和 npm 包管理器中获得。其他第三方 CDN 也可能会很快提供该版本,但请记住,我们无法控制其发布计划,它们需要一些时间。以下列出了 jQuery 3.6.3 的主要亮点。

正确使用CSS.supports

:has 问题在 jQuery 3.6.2 中已修复)之后,我们开始使用CSS.supports( "selector(SELECTOR)") 来确定如果直接传递到querySelectorAll,选择器是否有效。当CSS.supports 返回false 时,jQuery 会回退到自己的选择器引擎 (Sizzle)。显然,我们的实现存在一个错误。在CSS.supports( "selector(SELECTOR)") 中,SELECTOR 需要是一个<complex-selector>,而不是一个<complex-selector-list>。例如

CSS.supports("selector(div)"); // true
CSS.supports("selector(div, span)"); // false

这意味着所有复杂选择器列表都将通过 Sizzle 传递,而不是querySelectorAll。这在大多数情况下不一定是问题,但它确实意味着某些在浏览器中支持但在 Sizzle 中不支持的 4 级选择器(如:valid),如果它是选择器列表的一部分(例如"input:valid, div"),将不再起作用。需要注意的是,这目前只影响 Firefox,但在所有浏览器推出对CSS.supports 的更改后,这种情况将普遍存在。

该问题已在 jQuery 3.6.3 中修复,这是此版本中唯一的函数更改。

升级

我们预计从 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.3.js

https://code.jqueryjs.cn/jquery-3.6.3.min.js

您也可以从 npm 获取此版本

npm install jquery@3.6.3

精简版本

有时您不需要 ajax,或者您更喜欢使用专注于 ajax 请求的众多独立库之一。而且,通常使用 CSS 和类操作的组合来进行 Web 动画更简单。除了包含 ajax 和效果模块的 jQuery 正式版本外,我们还发布了一个“精简”版本,其中排除了这些模块。如今,jQuery 的大小很少会成为加载性能问题,但精简版本比正式版本压缩后小约 6k 字节。这些文件也可以在 npm 包和 CDN 上获得

https://code.jqueryjs.cn/jquery-3.6.3.slim.js

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

这些更新已经作为 npm 和 Bower 上的当前版本提供。有关获取 jQuery 的所有方法的信息,请访问https://jqueryjs.cn/download/。公共 CDN 会在今天收到其副本,请给他们几天时间来发布文件。如果您急于快速开始,请使用我们 CDN 上的文件,直到他们有机会更新。

感谢

感谢所有参与此版本发布的人员,包括提交补丁、报告错误或进行测试的人员,其中包括Michal Golebiowski-Owczarek 和整个 jQuery 团队。

更改日志

完整更改日志:3.6.3

构建

  • 从自定义构建中删除过时的 Insight 包 (81d5bd17)
  • 将 3.x-stable 版本更新为 3.6.3-pre。(2c5b47c4)

选择器

jQuery 3.6.2 发布!

发布日期: 作者:

您可能没有想到会这么快发布另一个版本,但 jQuery 3.6.2 已经发布!发布此版本的驱动力是 Chrome 中引入了一些新的选择器。以下将详细介绍该问题。

与往常一样,该版本可以在我们的 cdn 和 npm 包管理器中获得。其他第三方 CDN 也可能会很快提供该版本,但请记住,我们无法控制其发布计划,它们需要一些时间。以下列出了 jQuery 3.6.2 的主要亮点。

未定义和仅包含空格的 CSS 变量

jQuery 3.6.1 引入了一个小问题,即尝试检索不存在的自定义 CSS 属性的值(即$elem.css("--custom"))会导致抛出错误,而不是返回未定义。这已在 3.6.2 中修复。与此相关的是,我们还确保仅包含空格的值在所有浏览器中返回相同的内容。规范要求 CSS 变量值进行修剪,但浏览器在修剪方面并不一致。我们现在针对仅包含空格的值返回未定义,以使其与旧版 jQuery 和不同浏览器保持一致。

.contains() 和 <template>

最近报告了一个问题,显示<template> 的文档将其documentElement 属性设置为null,符合规范。虽然从语义上来说,模板尚未与文档绑定是合理的,但这会导致一个特殊情况,特别是在jQuery.contains() 和任何依赖它的方法中。这包括操作和选择器方法。幸运的是,修复 很简单。

不是 Ralph 导致了互联网崩溃

当 Chrome 最近引入了一些新的选择器时,互联网出现了一些震动,其中最重要的是:has()。这是一个受欢迎的补充,jQuery 团队也对此表示赞赏,但规范的更改意味着:has() 使用的是所谓的“宽容解析”。本质上,即使:has() 的参数无效,浏览器也不会返回任何结果,而是抛出错误。这在:has() 包含另一个 jQuery 选择器扩展(例如:has(:contains("Item")))或包含自身(:has(div:has(a)))的情况下是有问题的。Sizzle 依赖于此类错误来判断何时信任本机querySelectorAll 以及何时通过 Sizzle 运行选择器。过去有效的选择器在所有 jQuery 版本(包括最早的 jQuery 版本)中都失效了。

然而,这场小戏剧并没有持续很久。Chrome 团队迅速实施了解决方案,修复了大多数情况下的先前 jQuery 版本。Safari 对:has() 的实现方式略有不同,没有遇到相同的问题但是,仍然存在一个重要问题,需要确定如何解决 CSS 规范本身的这个问题。CSSWG 已经解决了这个问题

jQuery 采取了一些措施来确保任何宽容解析都不会破坏未来的 jQuery 版本,即使先前 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.2.js

https://code.jqueryjs.cn/jquery-3.6.2.min.js

您也可以从 npm 获取此版本

npm install jquery@3.6.2

精简版本

有时您不需要 ajax,或者您更喜欢使用专注于 ajax 请求的众多独立库之一。而且,通常使用 CSS 和类操作的组合来进行 Web 动画更简单。除了包含 ajax 和效果模块的 jQuery 正式版本外,我们还发布了一个“精简”版本,其中排除了这些模块。如今,jQuery 的大小很少会成为加载性能问题,但精简版本比正式版本压缩后小约 6k 字节。这些文件也可以在 npm 包和 CDN 上获得

https://code.jqueryjs.cn/jquery-3.6.2.slim.js

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

这些更新已经作为 npm 和 Bower 上的当前版本提供。有关获取 jQuery 的所有方法的信息,请访问https://jqueryjs.cn/download/。公共 CDN 会在今天收到其副本,请给他们几天时间来发布文件。如果您急于快速开始,请使用我们 CDN 上的文件,直到他们有机会更新。

感谢

感谢所有参与此版本发布的人员,包括提交补丁、报告错误或进行测试的人员,其中包括sashashuraAnders KaseorgMichal Golebiowski-Owczarek 和整个 jQuery 团队。

更改日志

完整更改日志:3.6.2

CSS

  • 针对仅包含空格的 CSS 变量值返回undefined (#5120) (8bea1dec)
  • 不要修剪未定义自定义属性的空格 (#5105, c0db6d70)

选择器

测试

  • 删除针对 Firefox XML 解析问题的解决方法 (965391ab)
  • 使 Ajax 测试在 iOS 9 中通过 (d051e0e3)