jQuery 3.2.1 现已发布,包含一些热修复

发布于 作者

jQuery 3.2.1 现已发布!此版本包含一些针对四天前 3.2.0 版本中引入的回归问题的热修复。我们希望尽快发布此补丁以解决您在升级时可能遇到的任何错误。最显著的一个问题与在没有显式设置尺寸的内联元素上检索宽度或高度有关。现在应该按预期工作。完整的更改列表见下文。还可以查看 3.2.0 博客文章,了解从 jQuery 3.1.1 升级时仍然适用的错误修复和改进。

从 jQuery 3.0+ 升级应该没有兼容性问题。如果您尚未升级到 jQuery 3+,请查看 3.0 升级指南jQuery Migrate 3.0 插件 将帮助您识别代码中的兼容性问题。

请尝试这个新版本并 告诉我们您遇到的任何问题

更改

核心

  • 确保 jQuery.holdReady 位于正确的位置 (#3573fcc9a9ec)

尺寸

  • 确保我们获取具有 display“inline”的元素的宽度和高度的正确值 (#3571473d2ea7)

事件

  • 确保将触发数据传递给单选按钮单击事件处理程序 (#3579a6b07052)
  • 还原:以相同方式触发复选框和单选按钮单击事件 (35785a32).
  • 还原:添加单选按钮单击触发测试 (4d6b4536).

GitHub 变更日志: 3.2.1 中修复的问题 | 所有更改

下载

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

https://code.jqueryjs.cn/jquery-3.2.1.js

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

您也可以从 npm 获取此版本

npm install jquery@3.2.1

精简版本

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

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

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

感谢

非常感谢所有通过测试、报告错误或提交补丁来参与此版本的您,包括 Steve Mao 和整个 jQuery 团队。

jQuery 3.2.0 发布了!

发布于 作者

jQuery 3.2.0 已发布!

此版本包含一些错误修复、改进和一些弃用。从 jQuery 3.0+ 升级应该没有兼容性问题。

如果您尚未升级到 jQuery 3+,请查看 3.0 升级指南jQuery Migrate 3.0 插件 将帮助您识别代码中的兼容性问题。

请尝试这个新版本并 告诉我们您遇到的任何问题

重要更新

  • 添加了对自定义 CSS 属性的支持 (#3144).
  • 弃用 jQuery.holdReady (#3288).
  • 弃用 jQuery.nodeName (#3475).
  • 弃用 jQuery.isArray (#2961).
  • 修复了 .width().height() 和相关方法中的一个错误,其中 CSS 变换包含在计算中。例如,具有样式 transform: scale(2x) 的元素 *不应* 使其宽度和高度值加倍 (#3193).
  • 添加了对 <template> 元素的支持,用于 .contents() 方法 (#3436).
  • 将弃用模块添加回精简版本。考虑到该模块的大小很小,此更改几乎无关紧要。我们认为,在与主要 jQuery 版本同时从精简版本中删除弃用部分更有意义 (#3237).

下载

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

https://code.jqueryjs.cn/jquery-3.2.0.js

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

您也可以从 npm 获取此版本

npm install jquery@3.2.0

精简版本

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

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

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

感谢

非常感谢所有通过测试、报告错误或提交补丁来参与此版本的您,包括 Connor AthertonJason BedardDavid Broder-RodgersOleg GaidarenkoMichał GołębiowskiRichard Gibsonkaran-96Manoj KumarAlexander LisianoiAlex LoudenAlex Padilla 和整个 jQuery 团队。

GitHub 变更日志: 3.2.0 中修复的问题 | 所有更改

完整变更日志

回调

核心

CSS

延迟

尺寸

文档

  • 从 ISSUE_TEMPLATE.md 中删除支持的 jQuery 版本 (fedc1aa6)
  • 更正问题模板中的错别字 (a8816caf)

效果

事件

  • 以相同方式触发复选框和单选按钮单击事件 (#3423b442abac)
  • 添加单选按钮单击触发测试 (5f35b5b4)

操作

偏移量

测试

  • 在不支持的浏览器中跳过 CSS 自定义属性测试 (bcec54ee)
  • 更新加载器,以便测试页面始终获取 jQuery (14b393d0)
  • 添加了对符号分隔的标签名称的测试 (#2006bd9145fa)
  • 清理 CSS 自定义属性支持测试后的代码 (fc34dbc2)

遍历

构建

  • 在 Node.js 7 上运行测试 (7bb62bb3)
  • 停止在 Node.js 0.10 上进行测试 (5b4cb0d3)
  • jQuery 基金会 -> JS 基金会 (7fbab881)
  • 使 @CODE-替换正则表达式更强大 (4e509677)
  • ESLint 设置改进 (cbc8638c)
  • 从 .npmignore 中删除 jscs.json (b3e0a560)
  • 将大部分 dist 文件夹添加到 .eslintignore (1754e315)
  • 使用有效的 ecmaVersion (8cb4cd71)
  • 放弃对在 Node.js 0.12 上构建的支持 (d10ac0e5)
  • 修复 AMD 模式下的测试 (56136897)
  • 修复 package.json 中的 markerPattern 和 ticketPattern 正则表达式 (25c6a0a2)
  • 在精简版本中保留弃用模块 (#32370588d0ce)

jQuery 3.1.1 发布了!

发布于 作者

jQuery 3.1.1 现已发布!

此版本包含一些错误修复和改进。与所有补丁版本发布一样,此版本中没有新功能或预期兼容性问题(如果从 jQuery 3.0+ 升级)。

我们修复了 与禁用选项相关的选择器问题即使 jQuery 使用 AMD 加载,也公开了 jQuery.noConflict,以及 修复了与空格有关的一些问题。我们还修复了 地图文件的问题,这将有助于在调试期间使用 CDN 副本。

如果您尚未升级到 jQuery 3+,请查看 3.0 升级指南jQuery Migrate 3.0 插件 将帮助您识别代码中的兼容性问题。

请尝试这个新版本并 告诉我们您遇到的任何问题

GitHub 变更日志: 在 3.1.1 中修复的问题 | 所有更改

下载

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

https://code.jqueryjs.cn/jquery-3.1.1.js

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

您也可以从 npm 获取此版本

npm install jquery@3.1.1

精简版本

有时您不需要 ajax,或者您更喜欢使用众多专注于 ajax 请求的独立库之一。而且,通常将 CSS 和类操作组合在一起用于所有 Web 动画会更简单。除了包含 ajax 和效果模块的常规版本的 jQuery 外,我们还发布了一个“精简”版本,其中不包含这些模块。总而言之,它排除了 ajax、效果和当前已弃用的代码。如今,jQuery 的大小很少是加载性能问题,但精简版本比常规版本小约 6k gzip 字节 - 23.6k 对比 30k。这些文件也提供在 npm 包和 CDN 上

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

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

感谢

非常感谢所有参与此版本发布的人员,包括通过测试、报告错误或提交补丁的人员,其中包括 Oleg GaidarenkoMichał GołębiowskiRichard GibsonAlexander LisianoiSteve MaoDave Methvin 和整个 jQuery 团队。

jQuery 基金会和标准

发布于 作者

多年来,jQuery 基金会一直在努力让 Web 开发人员在标准流程中拥有有意义的发言权。这就是我们很高兴帮助正式建立我们与 chapters.io 的合作关系的原因,这是一项让我们能够与全球各地的聚会和支持者合作的努力,帮助开发人员更多地了解最新标准并讨论当前提案。

我们的首个活动将是一个定期论坛,由我们自己的代表共同组织,并得到匹兹堡(宾夕法尼亚州)的 Code and SupplyBearded 的支持。在 8 月 2 日星期二,Brian Kardell 将在 Code and Supply 的定期聚会上 发表演讲,讨论更多关于标准和章节的信息。从那里,我们将组织第一次会议。如果您在匹兹堡并且从事 Web 开发,请前来参加。如果您有兴趣在您所在的城市举办和组织聚会,请在 jQuery 基金会标准团队 GitHub 上创建一个问题,我们将尽力找到可以帮助协调的人员。

jQuery 基金会知道,当开发人员参与时,Web 才能发挥最佳作用,但传统上标准并没有在其模型中包含这一点。标准通常由浏览器制造商和在结果中拥有重大利益的大公司推动。有时,标准对这些群体来说是有意义的,但在互联网的严酷现实中部署时,却变得不太有效。

2011 年 10 月,Addy Osmani 在博客上发表了宣布 jQuery 标准团队的帖子,任命 Yehuda Katz 和 Paul Irish 帮助代表开发人员社区参与 W3C 和 TC39。多年来,许多 jQuery 代表为倡导开发人员和改善标准流程付出了很多努力。

事实上,标准自那以后已经有了很大改进 - 过去的和现在的 jQuery 代表在每一步都发挥了作用。

2012 年 12 月,我们帮助选举了一批候选人来改革 W3C。2013 年,jQuery 成员(如 Yehuda Katz、我(Brian Kardell)、Paul Irish 和 Rick Waldron)帮助撰写了 可扩展 Web 宣言。这份文件概述了如何重新关注标准、纳入开发人员的声音以及重新构想更美好未来的新愿景。在过去几年中,这种愿景已逐渐成为每个 Web 标准机构的驱动力。然后,在 2014 年,又是 jQuery 号召 W3C 的年度会议(TPAC)正式采纳、支持并寻找更好的方法来纳入开发人员自己的声音。

可扩展 Web 宣言是关于 Addy 在那篇原始帖子中表达的许多相同原则:它鼓励标准机构让开发人员拥有发言权,并创建方法来加强反馈循环。正如 Addy 在那篇原始帖子中雄辩地表达的那样

…我们所有人多么频繁地感觉到我们的声音、建议和想法被负责定义这些标准的那些群体听到了?现实情况是,虽然我们许多人都希望看到改变,但由于时间限制和冗长的正式流程,我们无法参与标准讨论、参与编写规范以及参与有关未来功能的会议。这使得 Web 开发人员很难拥有发言权。

传统的标准参与模式无法大规模运作。数百万开发人员无法飞往世界各地参加会议,而数百万人的邮件列表也无法扩展。Chapters 的目标是为开发人员和标准之间提供一条管道,使其对每个人来说都方便参与其中。如果这听起来很有趣,请参与其中并加入进来!让您的声音被听到!

jQuery 3.1.0 发布 - 不再出现静默错误

发布于 作者

不久前,我们发布了 jQuery 3.0。jQuery 3.0 的主要功能之一是对 jQuery Deferreds 进行了一些小的重写。具体来说,我们使它们与 Promises/A+ 规范兼容。这基本上意味着必须将错误静默并作为拒绝值传递给拒绝处理程序(使用 deferred.catch() 添加)。这有利于防止 Promise 处理程序被运行时错误阻塞,但缺点是如果未添加拒绝处理程序,则错误将被静默。虽然这对 Deferreds 来说是正确的做法,但我们也更改了 jQuery.readyjQuery.fn.ready 以在幕后使用新的符合规范的 Deferreds。

不幸的是,如果您使用通常的方法来附加就绪处理程序(例如 jQuery(function() {})jQuery(document).ready(function() {})),您将无法添加拒绝处理程序。此外,您处于 Deferred 状态并不明显。任何运行时异常都将被吞并并丢失在太空中。我认为它们最终会出现在冥王星附近,而冥王星甚至不再是行星了!有 解决方法,但这对我们来说是不可接受的。

我们立即着手修复这个问题,于是 jQuery 3.1.0 诞生了。错误不再静默!您会看到它们默认情况下被记录到控制台。如果您希望对如何处理这些错误有更多控制,我们还添加了一个入口点:jQuery.readyException。在大多数情况下,您不需要使用它,但任何在就绪处理程序中抛出的错误都将传递到此函数,以备您需要它时使用。

jQuery.readyException =
  function(error) {
    // "error" is thrown from
    // any ready handler
  };

默认的 jQuery.readyException 将异步重新抛出错误,以避免停止执行并将错误记录到控制台。我们希望这能解决您在使用 jQuery 3.0 时遇到的任何调试问题。

我们预计此版本不会有任何重大更改,但如果您在从先前版本升级时遇到错误,请 告知我们

如果您需要帮助从 jQuery 1.x 或 2.x 升级到 jQuery 3.0,请查看 3.0 升级指南jQuery Migrate 1.4.1 博客文章

3.1.0GitHub 变更日志

下载

如果您愿意,您可以直接从 jQuery CDN 包含这些文件,或者将它们复制到您自己的本地服务器。

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

精简版本

有时您不需要 ajax,或者您更喜欢使用众多专注于 ajax 请求的独立库之一。而且,通常将 CSS 和类操作组合在一起用于所有 Web 动画会更简单。除了包含 ajax 和效果模块的常规版本的 jQuery 外,我们还发布了一个“精简”版本,其中不包含这些模块。总而言之,它排除了 ajax、效果和当前已弃用的代码。如今,jQuery 的大小很少是加载性能问题,但精简版本比常规版本小约 6k gzip 字节 - 23.6k 对比 30k。这些文件也提供在 npm 包和 CDN 上

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

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

非常感谢所有参与此版本发布的人员,包括通过测试、报告错误或提交补丁的人员,其中包括 Oleg GaidarenkoMicha? Go??biowski 和整个 jQuery 团队。

jQuery 3.0 正式发布!

发布于 作者

jQuery 3.0 现已发布!此版本自 2014 年 10 月开始开发。我们着手创建一个更精简、更快的 jQuery 版本(同时考虑向后兼容性)。我们删除了所有旧的 IE 解决方法,并在有意义的地方利用了一些更现代的 Web API。它是 2.x 分支的延续,但包含了一些我们认为早就该进行的重大更改。虽然 1.12 和 2.2 分支将继续在一段时间内接收关键支持补丁,但它们不会获得任何新功能或重大修订。jQuery 3.0 是 jQuery 的未来。如果您需要 IE6-8 支持,您可以继续使用最新的 1.12 版本。

尽管版本号为 3.0,但我们预计这些版本在升级现有代码时不会造成太大麻烦。是的,有一些“重大更改”证明了重大版本号的提升,但我们希望这些中断实际上不会影响太多人。

为了帮助升级,我们提供了一个全新的 3.0 升级指南。并且 jQuery Migrate 3.0 插件 将帮助您识别代码中的兼容性问题。您对更改的反馈将极大地帮助我们,所以请在您现有的代码和插件上试用它!

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

https://code.jqueryjs.cn/jquery-3.0.0.js

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

您还可以从 npm 获取发布版本

npm install jquery@3.0.0

此外,我们还发布了 jQuery Migrate 3.0。我们强烈建议您使用它来解决 jQuery 3.0 中的任何重大更改问题。您可以从此处获取这些文件

https://code.jqueryjs.cn/jquery-migrate-3.0.0.js

https://code.jqueryjs.cn/jquery-migrate-3.0.0.min.js

npm install jquery-migrate@3.0.0

有关在 jQuery Migrate 的帮助下将 jQuery 1.x 和 2.x 页面升级到 jQuery 3.0 的更多信息,请参阅 jQuery Migrate 1.4.1 博客文章

精简版本

最后,我们在这次版本中添加了一些新内容。有时候你不需要 AJAX,或者你更喜欢使用专注于 AJAX 请求的众多独立库之一。而且通常情况下,使用 CSS 和类操作的组合来完成所有网页动画会更简单。除了包含 AJAX 和效果模块的 jQuery 正式版,我们还发布了一个“精简版”,该版本排除了这些模块。总的来说,它排除了 AJAX、效果和当前已弃用的代码。如今,jQuery 的大小很少会成为加载性能的顾虑,但精简版本比正式版压缩后小约 6KB——23.6KB 对比 30KB。这些文件也可以在 npm 包和 CDN 上获取。

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

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

此版本是使用我们的自定义构建 API 创建的,该 API 允许您排除或包含任何您喜欢的模块。有关更多信息,请查看 jQuery README
 

与 jQuery UI 和 jQuery Mobile 的兼容性

虽然大多数功能都能正常工作,但 jQuery UI 和 jQuery Mobile 在即将发布的版本中会解决一些问题。如果您发现问题,请记住它可能已经在上游得到解决,并且使用 jQuery Migrate 3.0 插件 应该可以解决问题。预计很快发布。

 

主要变化

以下是这些版本中主要新功能、改进和错误修复的亮点,您可以在 3.0 升级指南 中了解更多详细信息。已修复问题的完整列表可在我们的 GitHub 错误跟踪器 上找到。如果您阅读了 3.0.0-rc1 的博客文章,以下功能与之相同。

jQuery.Deferred 现在与 Promises/A+ 兼容

jQuery.Deferred 对象已更新以与 Promises/A+ 和 ES2015 Promises 兼容,并已通过 Promises/A+ 兼容性测试套件 验证。这意味着我们需要对 .then() 方法进行一些重大更改。可以通过将 .then() 的任何使用替换为现在已弃用的 .pipe() 方法(它具有相同的签名)来恢复旧的行为。

  1. .then() 回调中抛出的异常现在将成为拒绝值。以前,异常会一直冒泡到顶部,中止回调执行。任何依赖于抛出异常的延迟解析的延迟都不会解析。

  2. 示例:未捕获的异常与拒绝值

    
    var deferred = jQuery.Deferred();
    deferred.then(function() {
      console.log("first callback");
      throw new Error("error in callback");
    })
    .then(function() {
      console.log("second callback");
    }, function(err) {
      console.log("rejection callback", err instanceof Error);
    });
    deferred.resolve();
    

    以前,会记录“第一个回调”,并且会抛出错误。所有执行都已停止。不会记录“第二个回调”或“拒绝回调”。新的、符合标准的行为是,您现在将看到记录了“拒绝回调”和 trueerr 是第一个回调的拒绝值。


  3. 通过 .then() 创建的延迟的解析状态现在由其回调控制——异常变为拒绝值,非 thenable 返回值变为履行值。以前,拒绝处理程序的返回值变为拒绝值。

  4. 示例:来自拒绝回调的返回值

    
    var deferred = jQuery.Deferred();
    deferred.then(null, function(value) {
      console.log("rejection callback 1", value);
      return "value2";
    })
    .then(function(value) {
      console.log("success callback 2", value);
      throw new Error("exception value");
    }, function(value) {
      console.log("rejection callback 2", value);
    })
    .then(null, function(value) {
      console.log("rejection callback 3", value);
    });
    deferred.reject("value1");
    

    以前,这将记录“拒绝回调 1 值 1”、“拒绝回调 2 值 2”和“拒绝回调 3 未定义”。

    新的、符合标准的行为是,这将记录“拒绝回调 1 值 1”、“成功回调 2 值 2”和“拒绝回调 3 [对象 Error]”。


  5. 回调始终异步调用,即使延迟已解析也是如此。以前,这些回调在绑定时同步执行。

  6. 示例:异步与同步

    
    var deferred = jQuery.Deferred();
    deferred.resolve();
    deferred.then(function() {
      console.log("success callback");
    });
    console.log("after binding");
    

    以前,这将记录“成功回调”然后记录“绑定后”。现在,它将记录“绑定后”,然后记录“成功回调”。


重要提示:虽然捕获的异常在浏览器内调试中具有优势,但使用拒绝回调来处理异常要明确得多。请记住,这将责任交给了您,要求您在处理 promise 时始终添加至少一个拒绝回调。否则,一些错误可能会被忽视。

我们构建了一个插件来帮助调试与 Promises/A+ 兼容的 Deferred。如果您在控制台上没有看到足够的信息来确定错误的来源,请查看 jQuery Deferred Reporter 插件

jQuery.when 也已更新,可以接受任何 thenable 对象,包括本机 Promise 对象。

https://github.com/jquery/jquery/issues/1722
https://github.com/jquery/jquery/issues/2102

向 Deferred 添加了 .catch()

catch() 方法已添加到 promise 对象中,作为 .then(null, fn) 的别名。

https://github.com/jquery/jquery/issues/2102

错误情况不会默默地失败

也许在一个深刻的时刻,您想知道,“窗口的偏移量是多少?” 然后你可能意识到这是一个疯狂的问题——窗口怎么能有偏移量呢?

在过去,jQuery 有时会尝试让这些情况返回某些东西,而不是让它们抛出错误。在这种特定情况下,询问窗口的偏移量,目前的答案是 { top: 0, left: 0 } 使用 jQuery 3.0,此类情况将抛出错误,以便不会默默地忽略疯狂的请求。请尝试使用此版本,看看是否有任何代码依赖于 jQuery 来掩盖无效输入的问题。

https://github.com/jquery/jquery/issues/1784

删除已弃用的事件别名

.load.unload.error 自 jQuery 1.8 以来已弃用,现在不再存在。使用 .on() 注册侦听器。

https://github.com/jquery/jquery/issues/2286

动画现在使用 requestAnimationFrame

在支持 requestAnimationFrame API 的平台上,该 API 几乎无处不在,除了 IE9 和 Android<4.4,jQuery 现在将在执行动画时使用该 API。这应该会导致动画更流畅,并使用更少的 CPU 时间——并且在移动设备上也能节省电池电量。

jQuery 在几年前尝试使用 requestAnimationFrame,但存在与现有代码的 严重兼容性问题,因此我们不得不将其撤回。我们认为通过在浏览器选项卡不可见时暂停动画,我们已经解决了大多数问题。尽管如此,任何依赖于动画始终以近乎实时的速度运行的代码都是一个不切实际的假设。

一些 jQuery 自定义选择器的大幅提速

感谢 Google 的 Paul Irish 的调查工作,我们发现了一些情况,即在同一个文档中多次使用 :visible 等自定义选择器时,我们可以跳过大量额外工作。现在,这种情况快了 17 倍!

请记住,即使有了这项改进,:visible:hidden 等选择器也可能很昂贵,因为它们依赖于浏览器来确定元素是否真的显示在页面上。在最坏的情况下,这可能需要对 CSS 样式和页面布局进行完全重新计算!虽然我们不鼓励在大多数情况下使用它们,但我们建议测试您的页面以确定这些选择器是否会导致性能问题。

此更改实际上已包含在 1.12/2.2 中,但我们希望在 jQuery 3.0 中重申这一点。

https://github.com/jquery/jquery/issues/2042

如上所述,升级指南 现在可供任何准备尝试此版本的人使用。除了在升级方面有所帮助之外,它还列出了更多值得注意的更改。

 

感谢

感谢所有通过代码贡献、问题报告等帮助发布此版本的人,包括但不限于 Jason BedardFredrik BlomqvistLeonardo BragaRalin ChimevJon DufresneOleg GaidarenkoRichard GibsonMichał GołębiowskiScott GonzálezZack HallAlexander KMartijn W. van der LeeAlexander LisianoiSteve MaoDave MethvinJha NamanJae Sung ParkTodor Prikumov、William Robinet、Felipe SatelerDamian SennJosh SorefJun SunChristophe Tafani-Dereeper、Vitaliy Terziev、Joe TrumbullBernhard M. WiedemannDevin WilsonHenry Wong

 

更改日志

Ajax

  • 减少了 21 字节 (eaa3e9f)
  • 在请求中保留 URL 哈希 (#1732e077ffb)
  • 使用正确的上下文执行 jQuery#load 回调 (#30355d20a3c)
  • 确保仍然遵循 ajaxSettings.traditional (#3023df2051c)
  • 删除对 jQuery.trim 的不必要使用 (0bd98b1)

属性

  • 避免在非小写属性 getter 上无限递归 (#3133e06fda6)
  • 添加一个支持注释并修复 tabIndex 钩子中的链接 (9cb89bf)
  • 为选择器上的设置值去除/合并空格 (#29787052698)
  • 删除冗余的父级检查 (b43a368)
  • 修复在 IE<=11 中设置选项中所选内容的问题 (#2732780cac8)

CSS

  • 不要解决 IE 11 中全屏模式下的 iframe 大小问题 (#3041ff1a082)
  • 将分离的元素切换为可见状态,除非它们具有 display: none (#2863755e7cc)
  • 确保 elem.ownerDocument.defaultView 不为 null (#286635c3148)
  • 将 animation-iteration-count 添加到 cssNumber (#2792df822ca)
  • 恢复 .show 中的级联覆盖行为 (#2654#2308dba93f7)
  • 阻止 Firefox 将断开连接的元素视为级联隐藏 (#2833fe05cf3)

核心

延迟

  • 将 jQuery.when 中的两个路径分开 (#3029, 356a3bc)
  • 为 jQuery.when 的原始转换提供显式的未定义上下文 (#3082, 7f1e593)
  • 删除默认回调上下文 (#3060, 7608437)
  • 对可能出现编程错误的异常发出警告 (#2736, 36a7cf9)
  • 从解开的承诺中正确传播进度 (#3062, d5dae25)
  • 在可能的情况下使 jQuery.when 同步 (#3100, de71e97)
  • 删除 $.when 中未记录的进度通知 (#2710, bdf1b8f)
  • 在异常情况下提供更好的堆栈诊断 (07c11c0)

尺寸

  • 为负边框和填充添加测试 (f00dd0f)

文档

  • 修复各种拼写错误 (aae4411)
  • 更新与 IE 相关的支持注释 (693f1b5)
  • 修复属性模块中的错误注释 (5430c54)
  • 更新支持 https 的链接。 (b0b280c)
  • 更新支持注释以遵循新语法 (6072d15)
  • 在可能的情况下使用 https (1de8346)
  • 为 jsfiddle 和 jsbin 使用 HTTPS URL (63a303f)
  • 添加常见问题解答以减少问题中的噪音 (dbdc4b7)
  • 添加关于使用 AMD 加载源代码的说明 (#2714, e0c25ab)
  • 添加关于使用 AMD 组织代码的说明 (#2750, dbc4608)
  • 引用新的功能指南和 API 原则 (#2320, 6054139)

效果

事件

  • 允许在没有目标的情况下构建 jQuery.Event (#3139, 2df590e)
  • 添加触摸事件属性,消除了对插件的需求 (#3104, f595808)
  • 添加最常用的指针事件属性 (7d21f02)
  • 删除 fixHooks,propHooks;使用 addProp 切换到 ES5 getter (#3103, #1746, e61fccb)
  • 使事件调度可被 JavaScript 引擎优化 (9f268ca)
  • 在添加时评估委托选择器 (#3071, 7fd36ea)
  • 覆盖无效委托选择器边缘情况 (e8825a5)
  • 修复用 null 处理程序链式调用 .on() (#2846, 17f0e26)
  • 删除事件对象的 pageX/pageY 填充 (#3092, 931f45f)

活动

  • 不要从模拟中执行原生 stop(Immediate)Propagation (#3111, 94efb79)

操作

  • 将标签名正则表达式更新到规范 (#2005, fb9472c)

偏移量

  • 解决严格模式下的 ClientRect “无设置器” 异常 (3befe59)

选择器

序列化

  • 对文字和函数返回的 null/undefined 进行相同处理 (#3005, 9fdbdd3)
  • 减少尺寸 (91850ec)

支持

测试

  • 考虑 Safari 9.1 (234a2d8)
  • 将 attributes.js 中的选择限制为 #qunit-fixture (ddb2c06)
  • 将 Edge 的 clearCloneStyle 预期支持设置为 true (28f0329)
  • 修复 Android 5.0 的默认 Chrome 浏览器和 Yandex.Browser 中的 Deferred 测试 (5c01cb1)
  • 为 jQuery.isPlainObject 添加额外的测试 (728ea2f)
  • 构建:更新 QUnit 并修复错误的测试 (b97c8d3)
  • 修复 Android 4.4 中的操作测试 (0b0d4c6)
  • 删除一个属性测试的副作用 (f9ea869)
  • 考虑新的偏移量测试 (f52fa81)
  • 使 iframe 测试在检查 isReady 后等待 (08d73d7)
  • 重构 testIframe() 以使其更 DRY 并更加一致 (e5ffcb0)
  • 将 jQuery.when 的同步假设弱化到 jQuery.ready.then (f496182)
  • 测试视图之外的元素位置 (#2909, a2f63ff)
  • 使捕获 Safari 9.0/9.1 的正则表达式更加稳健 (7f2ebd2)

遍历

jQuery 3.0 发布候选版...发布!

发布日期 作者

欢迎来到 jQuery 3.0 的发布候选版!这是我们预计将作为 jQuery 3.0 的最终版本发布的相同代码(如果出现任何重大错误或回归,则除外)。发布后,jQuery 3.0 将成为 jQuery 的唯一版本。1.12 和 2.2 分支将继续在一段时间内接收关键的支持补丁,但不会获得任何新功能或重大修订。请注意,jQuery 3.0 不支持 IE6-8。如果您需要 IE6-8 支持,您可以继续使用最新的 1.12 版本。

尽管版本号为 3.0,但我们预计这些版本在升级现有代码时不会造成太大麻烦。是的,有一些“重大更改”证明了重大版本号的提升,但我们希望这些中断实际上不会影响太多人。

为了帮助您升级,我们提供了一个全新的 3.0 升级指南。而 jQuery Migrate 3.0-rc 插件 将帮助您识别代码中的兼容性问题。您对这些更改的反馈将对我们有很大帮助,因此请在您的现有代码和插件中试用一下!

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

https://code.jqueryjs.cn/jquery-3.0.0-rc1.js

https://code.jqueryjs.cn/jquery-3.0.0-rc1.min.js

您也可以从 npm 获取发布候选版

npm install jquery@3.0.0-rc1

此外,我们还有 jQuery Migrate 3.0 的发布候选版。我们强烈建议您使用它来解决 jQuery 3.0 中任何与重大更改有关的问题。您可以从以下链接获取这些文件

https://code.jqueryjs.cn/jquery-migrate-3.0.0-rc1.js

https://code.jqueryjs.cn/jquery-migrate-3.0.0-rc1.min.js

npm install jquery-migrate@3.0.0-rc1

有关使用 jQuery Migrate 将您的 jQuery 1.x 和 2.x 页面升级到 jQuery 3.0 的更多信息,请参阅 昨天的 jQuery Migrate 博客文章

 

主要变化

以下仅是这些版本中主要新功能、改进和错误修复的重点,您可以在 3.0 升级指南 中深入了解。已修复问题的完整列表可在我们的 GitHub 问题跟踪器 上找到。

jQuery.Deferred 现在与 Promises/A+ 兼容

jQuery.Deferred 对象已更新以与 Promises/A+ 和 ES2015 Promises 兼容,并已使用 Promises/A+ 兼容性测试套件 验证。这意味着我们需要对 .then() 方法进行一些重大更改

  • .then() 回调中抛出的异常现在将成为拒绝值。以前,异常会一直冒泡到最上层,中止回调执行并不可逆转地锁定父级和子级 Deferred 对象。
  • 通过 .then() 创建的延迟的解析状态现在由其回调控制——异常变为拒绝值,非 thenable 返回值变为履行值。以前,拒绝处理程序的返回值变为拒绝值。
  • 回调始终异步调用。以前,它们将在绑定或解析后立即调用,以最后发生的事件为准。

考虑以下情况,其中父级 Deferred 被拒绝,子级回调生成异常


var parent = jQuery.Deferred();
var child = parent.then( null, function() {
  return "bar";
});
var callback = function( state ) {
  return function( value ) {
    console.log( state, value );
    throw new Error( "baz" );
  };
};
var grandchildren = [
  child.then( callback( "fulfilled" ), callback( "rejected" ) ),
  child.then( callback( "fulfilled" ), callback( "rejected" ) )
];
parent.reject( "foo" );
console.log( "parent resolved" );

从 jQuery 3.0 开始,这将先记录 “父级已解析”,然后再调用 *任何* 回调,每个子级回调随后将记录 “已完成 bar”,子孙级将被错误 “baz” 拒绝。在以前版本中,这将记录一次 “拒绝 bar”(子级 Deferred 被拒绝而不是已完成),然后立即终止并出现未捕获的错误 “baz”(“父级已解析” 未记录,子孙级未解析)。

虽然捕获异常在浏览器内调试中具有优势,但使用拒绝回调来处理异常要明确得多(即显式)。请记住,在使用 Promise 时,您有责任始终添加至少一个拒绝回调。否则,任何错误都将被忽略。

可以通过将.then()方法替换为现在已弃用的.pipe()方法(具有相同的签名)来恢复旧行为。

我们还构建了一个插件来帮助调试兼容 Promise/A+ 的 Deferred。如果您在控制台上没有看到有关错误的足够信息来确定其来源,请查看jQuery Deferred Reporter Plugin

jQuery.when 也已更新,可以接受任何 thenable 对象,包括本机 Promise 对象。

https://github.com/jquery/jquery/issues/1722
https://github.com/jquery/jquery/issues/2102

向 Deferred 添加了 .catch()

catch() 方法已添加到 promise 对象中,作为 .then(null, fn) 的别名。

https://github.com/jquery/jquery/issues/2102

错误情况不会默默地失败

也许在一个深刻的时刻,您想知道,“窗口的偏移量是多少?” 然后你可能意识到这是一个疯狂的问题——窗口怎么能有偏移量呢?

在过去,jQuery 有时会尝试让这些情况返回某些东西,而不是让它们抛出错误。在这种特定情况下,询问窗口的偏移量,目前的答案是 { top: 0, left: 0 } 使用 jQuery 3.0,此类情况将抛出错误,以便不会默默地忽略疯狂的请求。请尝试使用此版本,看看是否有任何代码依赖于 jQuery 来掩盖无效输入的问题。

https://github.com/jquery/jquery/issues/1784

删除已弃用的事件别名

.load.unload.error 自 jQuery 1.8 以来已弃用,现在不再存在。使用 .on() 注册侦听器。

https://github.com/jquery/jquery/issues/2286

动画现在使用 requestAnimationFrame

在支持 requestAnimationFrame API 的平台上,该 API 几乎无处不在,除了 IE9 和 Android<4.4,jQuery 现在将在执行动画时使用该 API。这应该会导致动画更流畅,并使用更少的 CPU 时间——并且在移动设备上也能节省电池电量。

jQuery 在几年前尝试使用 requestAnimationFrame,但存在与现有代码的 严重兼容性问题,因此我们不得不将其撤回。我们认为通过在浏览器选项卡不可见时暂停动画,我们已经解决了大多数问题。尽管如此,任何依赖于动画始终以近乎实时的速度运行的代码都是一个不切实际的假设。

一些 jQuery 自定义选择器的大幅提速

感谢 Google 的 Paul Irish 的调查工作,我们发现了一些情况,即在同一个文档中多次使用 :visible 等自定义选择器时,我们可以跳过大量额外工作。现在,这种情况快了 17 倍!

请记住,即使有了这项改进,:visible:hidden 等选择器也可能很昂贵,因为它们依赖于浏览器来确定元素是否真的显示在页面上。在最坏的情况下,这可能需要对 CSS 样式和页面布局进行完全重新计算!虽然我们不鼓励在大多数情况下使用它们,但我们建议测试您的页面以确定这些选择器是否会导致性能问题。

此更改实际上已包含在 1.12/2.2 中,但我们希望在 jQuery 3.0 中重申这一点。

https://github.com/jquery/jquery/issues/2042

如上所述,升级指南 现在可供任何准备尝试此版本的人使用。除了在升级方面有所帮助之外,它还列出了更多值得注意的更改。

jQuery 1.12.4 和 2.2.4 发布

发布日期 作者

jQuery 1.12.4 和 2.2.4 已发布!这些是包含一些错误修复的小版本。我们修复了使用 AMD 源代码的粘性问题以及 1.12.3 中的“:visible”选择器错误。

如果您需要升级帮助,请查看最新版本的 jQuery Migrate 插件。请注意,jQuery Migrate 1.4.1 旨在与这些 1.x 和 2.x 版本配合使用,而不是 jQuery 3.0。jQuery 3.0 尚未发布 - 尽管我们很快就会发布 RC 版本 - 但将为 jQuery 3.0 发布另一个 Migrate 版本。

我们预计此版本不会有任何重大更改,但如果您在从先前版本升级时遇到错误,请 告知我们

完整更改日志

2.2.4GitHub 更改日志

1.12.4GitHub 更改日志

下载

如果您愿意,可以直接从 jQuery CDN 包含这些文件,或者将它们复制到您自己的本地服务器。1.x 分支包括对 IE 6/7/8 的支持,而 2.x 分支不支持。

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

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

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

非常感谢所有参与此版本测试、报告错误或提交补丁的人,包括 Oleg GaidarenkoMichał Gołębiowski 以及整个 jQuery 团队。

jQuery Migrate 1.4.1 发布,以及 jQuery 3.0 的路线图

发布日期 作者

jQuery Migrate 插件的 1.4.1 版本已发布。它只有少量更改,但其中最重要的一个修复了未加引号的选择器的问题,这似乎在某些 WordPress 主题中非常常见。在大多数情况下,Migrate 在与 jQuery 1.12.x 或 2.2.x 结合使用时可以自动修复此问题,尽管它可能无法修复某些复杂的选择器。好消息是,在 WordPress 主题中报告的所有未加引号的选择器案例似乎都可以通过此版本的 Migrate 修复!

您可以在所有熟悉的地方获取此新版本

jQuery CDN: https://code.jqueryjs.cn/jquery-migrate-1.4.1.jshttps://code.jqueryjs.cn/jquery-migrate-1.4.1.min.js

npm: 只需 npm install jquery-migrate@1.4.1,它在 https://npmjs.net.cn/package/jquery-migrate 上列出。

Bower: 在您的 bower.json 文件中,在依赖项部分使用以下内容来复制 CDN 文件

 "dependencies": {
    ...
    "jquery-migrate": "https://code.jqueryjs.cn/jquery-migrate-1.4.1.js"
  },

与往常一样,我们建议您将 jQuery Migrate 用作将网站升级到 jQuery 新版本和相关插件时的查找和修复问题的工具。非压缩版本在控制台中提供了大量诊断信息。利用它们,我们是为您构建的!

Migrate 和 jQuery 3.0

jQuery Migrate 将继续其使 jQuery 升级更轻松的作用。jQuery Migrate 3.0 的候选版本即将发布。

由于积累了多年的更改,不可能存在单个版本的 jQuery Migrate 来支持从 jQuery 1.6(五年前!)一直到 jQuery 3.0 的所有更改。因此,对于 Migrate 3.0,我们建议使用此过程升级到 jQuery 3.0

  • 如果您还没有,请升级到最新的 1.x 或 2.x 版本的 jQuery,以及最新的 1.x 版本的 jQuery Migrate。(截至今天,是 jQuery 1.12.3 或 jQuery 2.2.3,与 jQuery Migrate 1.4.1 结合使用。)
  • 修复您可能在控制台中看到的Migrate 1.x 警告消息中识别出的任何问题。
  • 删除 Migrate 1.x 插件,并确保页面在不加载它的情况下仍然可以正常工作。
  • 升级到最新的 jQuery 3.x 和最新的 jQuery Migrate 3.x。
  • 修复您可能在控制台中看到的Migrate 3.x 警告消息中识别出的任何问题。
  • 删除 Migrate 3.x 插件,并确保页面在不加载它的情况下仍然可以正常工作。

在您探索此最新版本的 jQuery 时,请务必使用 jQuery Migrate 3.0,它将大大简化查找问题。我们希望这个插件成为一个让您的开发生活更轻松的工具。如果您遇到问题,可以在问题跟踪器中报告它们。

非常感谢 jQuery 核心团队的帮助,以及 Github 用户 ekonoval 的非常有用的错误报告!

ESLint 加入 jQuery 基金会

发布日期 作者

继上周宣布JSCS 与 ESLint 合并之后,本周 ESLint 团队宣布他们将把他们的项目带到 jQuery 基金会。我们非常高兴成为 ESLint 长期、公开治理的家的提供者。我们也期待着看到与 JSCS 的这种新的合作关系带来的成果。

在基金会,我们一直在努力寻找方法来改善 JavaScript 开发人员的开发体验。我们认为 ESLint 和 JSCS 在这方面一直是领导者。这两个非常出色的团队在 jQuery 基金会走到一起,我们预计将看到并支持 ESLint 的加速开发,以及为希望将 JavaScript 分析、代码风格检查和代码样式检查引入其项目的开发人员提供更轻松的发现和决策流程。

展望未来,我们希望继续支持 JavaScript 领域的创新,同时为 JavaScript 开发世界所有方面的协作提供一个合适的环境。有关 ESLint 选择 jQuery 基金会的理由以及这对相关团队和用户的影响的信息,请查看他们在ESLint 博客上的公告。