jQuery 4.0.0 第二个 Beta 版本

发布于 作者

去年二月,我们发布了 jQuery 4.0.0 的第一个 Beta 版本。现在我们准备发布第二个 Beta 版本,并且预计很快会发布候选版本™。此版本包含对 jQuery 测试基础设施的重大重写,移除了所有已弃用或支持不足的依赖项。但促使发布第二个 Beta 版本的主要变化是修复了 打包器(bundler)的 exports 字段。关于这些以及其他更改的更多信息请参见下文。

jQuery 4.0.0 中的许多重大更改是团队多年来一直想要进行的更改,但无法在补丁或次要版本中进行。我们删除了遗留代码(包括删除对 IE 11 之前版本的支持),删除了一些以前已弃用的 API,删除了从未记录过的公共函数的某些仅内部参数,并放弃了对一些过于复杂的“魔法”行为的支持。

我们将在最终发布之前发布一份全面的升级指南,概述移除的代码以及如何迁移。 jQuery Migrate 插件也将准备就绪以提供帮助。现在,请尝试使用此版本,并告知我们您是否遇到任何问题

像往常一样,该版本可在 我们的 CDN 和 npm 包管理器上获得。第三方 CDN 不会托管此 Beta 版本,但稍后会托管 4.0.0 最终版本。以下是 jQuery 4.0.0 beta.2 的一些亮点。

CommonJS + ESM:奇怪的床伴

有许多不同的方法可以在项目中包含 jQuery。支持所有这些方法可能很困难,尤其是在环境同时支持 CommonJS 和 ESM 模块时。我们希望支持 jQuery 可能被包含的所有方式,无论是使用命名导出还是默认导出。此外,我们希望确保 jQuery 永远只被包含一次,即使在同一个环境或 bundle 中,jQuery 既使用 ESM 的 import 导入,又使用 CommonJS 的 require 导入。我们认为我们已经找到了一种支持 Node.js 和 rollup、webpack 和 parcel 等打包器的解决方案。更多详细信息请参见 PR。此外,我们创建了一个 wiki 页面来解释 jQuery 的 package.json 中的 exports 属性在 4.0 中将如何工作。

布尔属性:生存还是……

HTML 规范定义了通常与布尔属性相关的布尔属性。如果缺少该属性,则它与 false 属性值相关联,如果存在则与 true 属性值相关联。布尔内容属性的唯一有效值是空字符串或完整的属性名称(例如 checked="checked")。

jQuery 历史上一直试图在这里提供帮助,并在 .attr() API 中以特殊方式处理布尔属性

  1. 对于 getter,只要属性存在,它就会返回
    忽略值的小写属性名称。
  2. 对于 setter,当传递 false 时,它会移除该属性;
    否则,它会忽略传递的值并设置该属性——
    有趣的是,在 jQuery >=3 中不再小写。

问题在于规范偶尔会将布尔属性转换为具有特殊行为的附加属性值的属性——一个例子是新的 "until-found" 值用于 hidden 属性。我们的 setter 规范化意味着使用 .attr() 无法传递这些值(.prop() 不受影响)。此外,偶尔会引入新的布尔属性,并且 jQuery 无法轻松地将它们添加到列表中,而不会造成破坏性更改。

此补丁移除了对布尔属性的任何特殊处理——getter 以原样返回该值,setter 设置提供的该值,只有一个例外。为了保持向后兼容性,此补丁使 false 布尔值触发对所有非 ARIA 属性的属性移除。例如,.attr( "checked", false ) 将继续移除 checked 属性,这是将相应属性设置为 false 的唯一方法。ARIA 属性免于该规则,因为其中许多属性将字符串 "false" 识别为具有语义与属性缺失不同的有效值。要移除 ARIA 属性,请使用 .removeAttr() 或将 null 作为值传递给 .attr()

表格中元素的位置

jQuery 4.0.0-beta.2 还修复了在查找表格中元素位置时出现的一些不一致行为。基于位置的偏移父元素可能会根据元素的 position 样式是 static 还是 relative 而发生变化。

<div id="container" style="position: relative;">
    <table>
        <tr>
            <td>
                <span id="static"></span>
                <span id="relative" style="position: relative;"></span>
            </td>
        </tr>
    </table>
</div>

之前,$('#static').position() 返回相对于包含 <td> 元素的位置,而 $('#relative').position() 返回相对于 #container 的位置。

现在,这两个元素都返回相对于 #container 的位置。

下载

您可以从 jQuery CDN 获取文件,或直接链接到它们

https://code.jqueryjs.cn/jquery-4.0.0-beta.2.js

https://code.jqueryjs.cn/jquery-4.0.0-beta.2.min.js

您也可以从 npm 获取此版本

npm install jquery@4.0.0-beta.2

精简版

有时您不需要 ajax,或者更喜欢使用许多独立的专注于 ajax 请求的库。而且,通常使用 CSS 和类操作进行 Web 动画更简单。最后,所有 jQuery 支持的浏览器(IE11 除外)现在都支持本机 Promises,因此在大多数情况下不再需要 Deferreds 和 Callbacks。除了包含所有内容的常规 jQuery 版本之外,我们还发布了一个排除这些模块的“精简”版本。这些天 jQuery 的大小很少成为加载性能问题,但精简版本比常规版本小约 8k gzip 字节。这些文件也可用在 npm 包和 CDN 上

https://code.jqueryjs.cn/jquery-4.0.0-beta.2.slim.js

https://code.jqueryjs.cn/jquery-4.0.0-beta.2.slim.min.js

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

感谢

感谢所有参与此版本发布的人员,包括提交补丁、报告错误或进行测试的人员,包括 Michał Gołębiowski-OwczarekJ.SonLiam James 和整个 jQuery 团队。

我们在 Mastodon 上!

jQuery 有一个 Mastodon 帐户!我们现在将发布和更新发布到 X 和 Mastodon。此外,您可能对关注一些拥有 Mastodon 帐户的团队成员感兴趣。

jQuery: https://social.lfx.dev/@jquery

mgol: https://hachyderm.io/@mgol

timmywil: https://hachyderm.io/@timmywil

变更日志

完整更改日志:4.0.0-beta.2

属性

  • 使 .attr( name, false ) 移除所有非 ARIA 属性 (#5388, 063831b6)

构建

  • 将 github-actions 组更新为 2 个更新 (3a98ef91)
  • 更新依赖项;修复 Windows 上的打包器测试 (cb8ab6cc)
  • 改进 eslint 配置的特异性;添加 ecma 版本 (74970524)
  • 将 github-actions 组更新为 2 个更新 (46b9e480)
  • 将 dependabot PR 分组更新为 GitHub Actions (3cac1465)
  • 更新 actions/cache、actions/checkout 和 github/codeql-action (df1df950)
  • 将 express 从 4.18.3 升级到 4.19.2 (691c0aee)
  • 使比较大小缓存可读以进行手动编辑 (783c9d69)
  • 修复当分支处于脏状态时,精简文件的尺寸比较 (8a3a74c4)
  • 迁移更多 fs.promises 的使用;使用 node: 协议 (ae7f6139)
  • 将 github/codeql-action 从 3.24.0 升级到 3.24.6 (ae67ace6)
  • 将 actions/cache 从 4.0.0 升级到 4.0.1 (68f772e0)
  • 停止支持 Node 10 (5aa7ed88)
  • 添加 GitHub Actions 工作流以更新 Filestash (0293d3e3)
  • 更新 jenkins 脚本以仅构建 (c21c6f4d)
  • 更新 GitHub Actions (#5402) (bf11739f)

CSS

  • 测试:修复测试并支持 CSS 缩放下的测试 (#5489, 071f6dba)

核心

  • 修复 exports 设置,使打包器可以使用 ESM 和 CommonJS (#5416, 60f11b58)

文档

  • 将剩余的 HTTP URL 更新为 HTTPS (7cdd8374)

事件

  • 提高 leverageNative 中内部原生事件的鲁棒性 (#5459, 527fb3dc)

Offset

  • 提高在查找“真实”偏移父元素时的搜索深度 (556eaf4a)

发布

Tests

  • 移除不必要的滚动功能测试 (ea31e4d5)
  • 使 :has 选择器测试与 3.x-stable 对齐 (f2d9fde5)
  • 撤销并发组更改 (fa73e2f1)
  • 将 github ref 添加到并发组 (5880e027)
  • 使 beforeunload 事件测试无论扩展如何都能工作 (399a78ee)
  • 共享所有工作程序类型的队列/浏览器处理 (284b082e)
  • 改进不同类型值的差异 (b9d333ac)
  • 显示任何和所有实际/预期值 (f80e78ef)
  • 将差异添加到测试报告器 (44fb7fa2)
  • 将实际和预期消息添加到测试报告器 (1e84908b)
  • 修复失败的浏览器确认导致的工作程序重新启动 (fedffe74)
  • 为测试运行器添加 –hard-retries 选项 (822362e6)
  • 修复在服务器未停止的情况下清理的问题 (0754d596)
  • 修复不稳定的消息日志;忽略删除 worker 失败 (02d23478)
  • 在 BrowserStack 测试中重用浏览器 worker (#5428) (95a4c94b)
  • 使用允许列表代替白名单 (2b97b6bb)
  • 将测试基础设施迁移到最小依赖 (dfc693ea)
  • 修复 Node.js 20 上的 Karma 测试 (d478a1c0)