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 错误跟踪器上提供了已修复问题的完整列表: https://github.com/jquery/jquery/issues?q=is%3Aissue+milestone%3A3.0.0.

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

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

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

考虑以下示例,其中父 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”(未记录“父级已解析”,孙子回调保持未解析状态)。

虽然捕获的异常在浏览器内调试方面有优势,但使用拒绝回调来处理异常更具声明性(即更明确)。请记住,这要求您在使用承诺时始终添加至少一个拒绝回调。否则,任何错误都将无法被注意到。

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

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

jQuery.when 也已更新,可以接受任何可 then 的对象,包括原生 Promise 对象。

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

将 .catch() 添加到 Deferred

catch() 方法已添加到承诺对象中,作为 .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 的平台上(几乎所有平台都支持,除了 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 版本——但 Migrate 的另一个版本将与 jQuery 3.0 一起发布。

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

完整更改日志

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 一起使用时可以自动解决此问题,但它可能无法修复某些复杂的选择器。好消息是,此版本的 Migrate 似乎可以修复 WordPress 主题中报告的所有无引号选择器案例!

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

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 提供的非常有用的错误报告!