jQuery 3.7.0 现已发布!此版本包含所有内容:错误修复、新方法和性能改进!我们甚至放弃了我们长期使用的选择器引擎:Sizzle。或者,我应该说,我们将其移动到了 jQuery 中。jQuery 不再依赖 Sizzle 作为独立项目,而是将其实现代码直接放到 jQuery 核心代码中。这将帮助我们为未来 jQuery 版本中选择器将要进行的重大更改做好准备。目前来说这并没有什么意义,但是 jQuery 确实减少了一些字节,因为 Sizzle 支持比 jQuery 更老的浏览器。顺便说一下,我们确实计划将 Sizzle 存档,但是我们会在一篇未来的博客文章中提供更多详细信息。
像往常一样,此版本已在 我们的 cdn 和 npm 包管理器上可用。其他第三方 CDN 也可能会很快提供此版本,但请记住,我们无法控制他们的发布计划,他们需要一些时间。以下是 jQuery 3.7.0 的亮点。
新方法:.uniqueSort()
一些 API,如 .prevAll()
,以相反的顺序返回元素,这可能会导致在与包装方法一起使用时出现一些令人困惑的行为。例如,
$elem.prevAll().wrapAll("<p/>")
上面将按预期包装所有元素,但它会以相反的顺序将这些元素写入 DOM。为了以一种不会破坏现有代码的方式解决这个问题,我们已记录 .prevAll()
和类似方法返回反向排序的集合,这在许多情况下仍然是可取的。但我们还添加了一种新方法来简化操作:一个可链式调用的 .uniqueSort()
,它执行与现有但静态的 jQuery.uniqueSort()
相同的操作。
因此,我们之前的示例将变为
$elem.prevAll().uniqueSort().wrapAll("<p/>")
并且 DOM 中的元素顺序将保持不变。
添加了一些无单位 CSS 属性
jQuery 3.7.0 添加了对更多 CSS 属性的支持,这些属性在没有设置单位的情况下不应该自动添加“px”。例如,.css('aspect-ratio', 5)
将导致 CSS aspect-ratio: 5px;
。总的来说,我们添加了七个属性,并且 React 在我们的列表中提供了一些帮助。感谢 React!
值得注意的是,jQuery 4.0 将改变我们处理无单位 CSS 属性的方式。我们将不再依赖 CSS 属性列表来避免添加 "px"
,而是将有一个属性列表,当没有传递单位时,我们绝对想要向其中添加 "px"
。这应该更具未来可塑性。
操作性能提升
jQuery 3.7.0 在使用 .append()
等操作方法时,对于某些用例来说,性能得到了显著提升。当我们删除对不再支持的浏览器的支持测试时,这意味着不再需要对文档更改进行检查。从本质上讲,这导致速度提高了 0% 到 100%。对于一些罕见的用例,用户经常在不同的文档之间切换上下文(例如,在多个 iframe 之间运行操作),速度提升最为显著。
outerHeight(true)
中的负边距
在 jQuery 3.3.0 中,我们修复了一个问题,该问题是在 .innerWidth()
和 .innerHeight()
的计算中包含滚动槽。但是,该修复没有考虑到负边距,这意味着 .outerWidth(true)
和 .outerHeight(true)
不再尊重负边距。我们在 3.7.0 中通过将边距计算与滚动槽调整分离来解决这个问题。
在 IE 中使用不同的原生焦点事件
焦点和模糊事件可能是 jQuery 在跨浏览器时处理起来最复杂的事件。jQuery 3.4.0 在修复焦点事件传递的数据方面出现了一些小的回归。我们终于能够在 jQuery 3.7.0 中 关闭所有这些工单!
但是,我们需要指出 IE 中可能出现的重大更改。在所有版本的 IE 中,focus
和 blur
事件都是异步触发的。在所有其他浏览器中,这些事件都是同步触发的。IE 中的异步行为 导致 问题。修复方法是更改我们使用的原生事件。幸运的是,focusin
和 focusout
在 IE 中是同步运行的,因此我们现在在 IE 中通过 focusin
模拟 focus
,通过 focusout
模拟 blur
。这一改变使我们能够在 IE 中依靠同步焦点事件,从而解决了大量问题(有关完整列表,请参阅变更日志)。
如果你很好奇,IE 支持将在 jQuery 5.0 中被放弃,并且许多这些更改已经在 PR 中。
升级
我们预计从 jQuery 3.0+ 版本升级时不会出现兼容性问题。要升级,请查看新的 3.5 升级指南。如果你尚未升级到 jQuery 3+,请先查看 3.0 升级指南。
jQuery Migrate 插件 将帮助你识别代码中的兼容性问题。请试用此新版本,并 告诉我们你遇到的任何问题。
如果你无法升级到 3.5+,Daniel Ruf 已友好地为以前的 jQuery 版本提供了 补丁。
下载
你可以从 jQuery CDN 获取文件,或直接链接到它们
https://code.jqueryjs.cn/jquery-3.7.0.js
https://code.jqueryjs.cn/jquery-3.7.0.min.js
你也可以从 npm 获取此版本
npm install jquery@3.7.0
精简版本
有时你不需要 ajax,或者你更喜欢使用专注于 ajax 请求的众多独立库之一。而且,使用 CSS 和类操作来进行 Web 动画通常更简单。除了包含 ajax 和效果模块的 jQuery 常规版本之外,我们还发布了一个“精简”版本,该版本排除了这些模块。如今,jQuery 的大小很少成为加载性能的关注点,但是精简版本比常规版本小约 6k gzip 字节。这些文件也在 npm 包和 CDN 上可用
https://code.jqueryjs.cn/jquery-3.7.0.slim.js
https://code.jqueryjs.cn/jquery-3.7.0.slim.min.js
这些更新已作为 npm 和 Bower 上的当前版本提供。有关获取 jQuery 的所有方法的信息,请访问 https://jqueryjs.cn/download/。公共 CDN 今天将收到它们的副本,请给他们几天时间发布文件。如果你急于开始,请使用我们 CDN 上的文件,直到他们有机会更新为止。
感谢
感谢所有参与此版本发布的人,包括提交补丁、报告错误或测试的人,包括 fecore1、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.7.0
构建
- 仅在需要时安装 Playwright 依赖项 (212b6a4f)
- 将 actions/setup-node 从 3.5.1 升级到 3.6.0 (582785e0)
- 在 Playwright WebKit 上运行 GitHub Action 浏览器测试 (da7057e9)
- 将 middleware-mockserver 迁移到现代 JS (6b2abbdc)
- 从自定义构建中删除过时的 Insight 包 (37b04d5a)
CSS
延迟
文档
事件
- 简化 leverageNative 中对保存数据的检查 (9ab26aa5)
- 使 trigger(focus/blur/click) 与原生处理程序一起使用 (#5015,754108fb)
- 通过 focusin/focusout 在 IE 中模拟 focus/blur (3.x 版本) (#4856,#4859,#4950,59f7b55b)
发布
- 在 Windows 中添加对 md5 校验和的支持 (3b7bf199)
选择器
- 删除一个过时的注释 (14685b31)
- 将 activeElement 访问包装在 try-catch 中 (3936cf3e)
- 停止依赖 CSS.supports( “selector(…)” ) (#5194,63c3af48)
- 将 rcombinators 重命名为 rleadingCombinator (ac1c59a3)
- 使选择器列表再次与
qSA
一起使用 (#5177,848de625) - 实现
uniqueSort
可链式方法 (#5166,0acbe643) - 将 Sizzle 内联到选择器模块:3.x 版本 (#5113) (6306ca49)