jQuery 3.1.1 发布!

发布日期 作者

jQuery 3.1.1 现已发布!

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

我们修复了 禁用选项的选择器问题公开 jQuery.noConflict(即使 jQuery 是用 AMD 加载的),以及 修复了一些与空白有关的问题。我们还修复了 地图文件的问题,这将有助于在调试期间使用 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 请求的众多独立库之一。而且,对于所有 Web 动画,使用 CSS 和类操作的组合通常更简单。除了包含 ajax 和 effects 模块的 jQuery 正式版本之外,我们还发布了一个“精简”版本,它排除了这些模块。总的来说,它排除了 ajax、effects 和当前已弃用的代码。如今,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 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 请求的众多独立库之一。而且,对于所有 Web 动画,使用 CSS 和类操作的组合通常更简单。除了包含 ajax 和 effects 模块的 jQuery 正式版本之外,我们还发布了一个“精简”版本,它排除了这些模块。总的来说,它排除了 ajax、effects 和当前已弃用的代码。如今,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 请求的众多独立库之一。而且,对于所有 Web 动画,使用 CSS 和类操作的组合通常更简单。除了包含 ajax 和 effects 模块的 jQuery 正式版本之外,我们还发布了一个“精简”版本,它排除了这些模块。总的来说,它排除了 ajax、effects 和当前已弃用的代码。如今,jQuery 的大小很少会成为加载性能问题,但精简版本比正式版本小约 6k gzip 字节——23.6k 对 30k。这些文件也存在于 npm 包和 CDN 中

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

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

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

与 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() 回调中抛出的异常现在将成为拒绝值。以前,异常会一直冒泡到顶层,中止回调执行。任何依赖于抛出异常的 Deferred 解析的 Deferred 永远不会解析。

  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() 创建的 Deferred 的解析状态现在由其回调控制——异常变为拒绝值,非 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 value1”、“拒绝回调 2 value2”和“拒绝回调 3 undefined”。

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


  5. 回调始终异步调用,即使 Deferred 已经解析。以前,这些回调在绑定时同步执行。

  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 的平台上(几乎所有地方,但 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)
  • 为 select 上的设置值去除/折叠空格 (#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)

核心

  • 实现没有 Deferred 的 ready (#1778#18235cbb234)
  • 改进 isNumeric 逻辑并增加测试覆盖率 (#27807103d8e)
  • 在 parseHTML 中设置上下文的基准 href (#296510fc590)
  • 简化 isPlainObject (#2986e0d3bfa)
  • 添加对 `jQuery.isPlainObject(localStorage)` 的测试 (ce6c83f)
  • 不要公开 `jQuery.globalEval` 的第二个参数 (6680c1b)
  • 弃用 jQuery.parseJSON (#280093a8fa6)

Deferred

  • 在 jQuery.when 中分离两条路径 (#3029356a3bc)
  • 为 jQuery.when 原始强制转换提供显式 undefined 上下文 (#30827f1e593)
  • 删除默认回调上下文 (#30607608437)
  • 对可能是编程错误的异常发出警告 (#273636a7cf9)
  • 从解开的 Promise 正确传播进度 (#3062d5dae25)
  • 尽可能使 jQuery.when 同步 (#3100de71e97)
  • 删除 $.when 中未记录的进度通知 (#2710bdf1b8f)
  • 在异常时提供更好的堆栈诊断 (07c11c0)

尺寸

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

文档

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

效果

  • 删除旧 IE 中的 width/height 异常 (#2488, e04e246)
  • 添加使用 jQuery.speed 直接执行的测试 (#2716, cb80b42)

事件

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

活动

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

操作

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

偏移

  • 解决严格模式下 ClientRect 的“无 setter”异常 (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() 创建的 Deferred 的解析状态现在由其回调控制——异常变为拒绝值,非 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 开始,这将在调用任何回调之前记录“父级已解析”,然后每个子级回调将记录“fulfilled bar”,子孙节点将被拒绝,并带有错误“baz”。在以前的版本中,这将记录一次“rejected bar”(子级 Deferred 被拒绝而不是已完成),然后立即终止,并带有未捕获的错误“baz”(“父级已解析”未被记录,子孙节点保持未解析)。

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

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

我们还构建了一个插件来帮助调试与 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 的平台上(几乎所有地方,但 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 一起使用时可以自动修复此问题,但它可能无法修复某些复杂的选择器。好消息是,在 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 文件中,在 dependencies 部分使用以下内容来复制 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 的非常有用的错误报告!

jQuery 1.12.3 和 2.2.3 发布

发布于 作者

jQuery 1.12.3 和 2.2.3 已经发布!这些是包含几个错误修复的小版本。存在一个小问题,导致 1.x 分支与 2.x 不一致,并且最近在两个分支中引入的错误会影响 .load 方法。

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

完整变更日志

2.2.3GitHub 变更日志

1.12.3GitHub 变更日志

下载

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

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

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

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

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

jQuery 1.12.2 和 2.2.2 发布

发布于 作者

我们继续发布 1.x 和 2.x 分支的两个新的补丁版本。这些版本包含一些错误修复,包括 jQuery.isPlainObject 的两个边缘情况错误以及在 IE 11 中使用 .prop() 方法设置选项元素的 selected 属性时的错误。

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

我们很快将发布 jQuery 3.0 的候选版本。

完整变更日志

2.2.2GitHub 变更日志

1.12.2GitHub 变更日志

下载

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

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

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

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

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

jQuery 1.12.1 和 2.2.1 发布

发布于 作者

随着 jQuery 团队准备发布 3.0 正式版,我们继续维护 1.12 和 2.2 分支。这两个补丁版本修复了一些错误并提高了稳定性。最显著的错误修复涉及 .position() 方法的问题,这会影响 jQuery UI 工具提示在 Internet Explorer 中的位置。

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

下载

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

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

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

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

完整变更日志

2.2.1GitHub 变更日志

1.12.1GitHub 变更日志

非常感谢所有参与此版本测试、报告错误或提交补丁的人,包括 Oleg GaidarenkoMichał GołębiowskiZack HallTodor PrikumovDevin Wilson

jQuery 3.0 Beta 版发布

发布于 作者

时机已到。在今天,jQuery 的 10 周年纪念日,jQuery 3.0 已经达到 Beta 状态。上周,我们宣布了 1.x 和 2.x 分支的最后一个次要版本。这些分支将继续在有限的时间内接收补丁(即仅重大回归或错误);jQuery 3.0 是未来。如果您需要 IE6-8 支持,您可以继续使用最新的 1.12 版本。

jQuery Compat 的死亡

only-one

如果您阅读了 jQuery 3.0 Alpha 版博文,您可能记得我们宣布了我们称之为“jQuery Compat”的东西。您可以忘记它。在 1 月 12 日,微软 放弃了对 IE8、IE9 和 IE10 的支持。我们还没有达到那种程度,但我们正在放弃对 IE8 的支持。随着 IE8 的消失,jQuery Compat 也随之消失,在我们甚至发布最终版本之前就消失了。从现在开始只会有一个 jQuery!

尽管版本号是 3.0,但我们预计这些版本在升级现有代码时不应该太麻烦。是的,有一些“重大更改”,这些更改证明了主版本号的增加是合理的,但我们希望这些中断实际上并不影响很多人。jQuery Migrate 3.0 插件(发布时)将帮助您识别代码中的兼容性问题。您对这些更改的反馈将对我们有很大帮助,所以请在您的现有代码和插件上试用它!

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

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

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

您也可以从 npm 获取 Beta 版

npm install jquery@3.0.0-beta1

 

重大更改

以下是这些版本中主要的新功能、改进和错误修复的重点。我们的 GitHub 错误跟踪器 上提供了完整的更改列表。

.show().hide() 方法

在 jQuery 3.0 Alpha 版中,我们尝试将这些方法视为内联显示无移除器 (.show()) 和内联显示无添加器 (.hide())。这具有极大地简化这些方法并提高性能的优点(它需要更少的计算)。但是,事实证明这对我们的用户来说是有问题的。删除内联 display:none 并不总是显示元素(例如,如果元素从样式表中隐藏),而这种情况太常见了。我们意识到我们无法为 jQuery 插件(尤其是)提供一种简单的方法来确保元素显示出来。

我们已经恢复了该更改,并且我们为 show 和 hide 方法保留的更改对您的代码的影响要小得多。事实上,即使恢复了更改,我们也 极大地提高了隐藏许多元素时的性能

使用 `.data()` 名称的特殊情况

我们已经更新了我们的 `.data()` 实现,使其更接近于 HTML5 数据集规范。现在,所有键都将从 kebab-case 转换为 camelCase,无论访问方法如何,数字不再参与转换。例如,我们不再区分 "foo-bar" 和 "fooBar",但区分 "foo-42" 和 "foo42"。这些更改主要在通过不带参数调用 `.data()` 获取所有数据时,或尝试使用转换后的键 ( `.data(“foo42”)` ) 而不是原始键 ( `.data(“foo-42”)` ) 访问数据时生效。

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

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

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

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

考虑以下情况,其中父级 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 开始,这将在调用任何回调之前记录“父级已解析”,然后每个子级回调将记录“fulfilled bar”,子孙节点将被拒绝,并带有错误“baz”。在以前的版本中,这将记录一次“rejected bar”(子级 Deferred 被拒绝而不是已完成),然后立即终止,并带有未捕获的错误“baz”(“父级已解析”未被记录,子孙节点保持未解析)。

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

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

我们还创建了一个插件来帮助调试与 Promises/A+ 兼容的 Deferreds。如果您发现存在被吞噬的幽灵错误,请查看 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.ajax 中删除特殊情况的 Deferred 方法。

jqXHR 对象是一个 Promise,但也具有额外的 method。随着用户越来越多地采用 Promise 模式来处理 AJAX 等异步工作,在 jQuery.ajax 返回的 Promise 中拥有带有重复方法名的特殊情况的想法越来越糟糕。因此,这些已弃用的名称已被删除。请勿使用特殊情况的 `success, error, complete`,而是使用相应的 `done, fail, always` 方法。

请注意,这不会对同名的 `success, error, complete` 回调产生任何影响,这些回调仍然存在,并且不会被弃用。这仅影响 Promise 方法!它也不会删除或弃用 `abort` 方法。

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

错误情况不会静默失败

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

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

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

`.width()`, `.height()`, `.css(“width”)` 和 `.css(“height”)` 将返回十进制值(只要浏览器这样做)。

以前,jQuery 在检索宽度和高度时会对值进行四舍五入。一些浏览器返回亚像素值,例如 IE 和 Firefox,并且有时用户在依赖这些值进行布局时需要这种精度。我们预计此更改不会对您的代码产生重大影响,但如果有任何影响,请告诉我们。

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

删除已弃用的事件别名

.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,但存在 严重兼容性问题,因此我们不得不将其撤回。我们认为,通过在浏览器选项卡不可见时挂起动画,我们已经解决了大多数问题。尽管如此,任何依赖于动画始终以近乎实时的方式运行的代码都做出了不切实际的假设。

`.unwrap( selector )`

在 jQuery 3.0 之前,`.unwrap()` 方法不接受任何参数。`selector` 参数提供了一种方法,可以指定要删除哪些包装器。

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

jQuery.fn.domManip 现在无法访问。

`jQuery.dir`, `jQuery.sibling`, `jQuery.buildFragment`, `jQuery.access` 和 `jQuery.swap` 在 jQuery 1.12 和 2.2 中都被私有化。这些方法以及 `jQuery.fn.domManip` 一直以来都只用于内部使用,从未在文档中说明。我们最终将它们私有化,以避免混淆。

https://github.com/jquery/jquery/pull/2182
https://github.com/jquery/jquery/issues/2224
https://github.com/jquery/jquery/issues/2225

某些 jQuery 自定义选择器的巨大加速

感谢 Google 的 Paul Irish 的一些侦探工作,我们发现了一些情况,当在同一文档中多次使用 :visible 等自定义选择器时,我们可以跳过一堆额外的工作。现在,特定情况快了 17 倍!

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

此更改实际上已包含在 1.12/2.2 中,但我们想重申它适用于 jQuery 3.0。

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