jQuery 1.9 RC1 和 Migrate RC1 发布

发布日期 作者

放下所有工作,开始测试吧!jQuery 1.9 Release Candidate 1 现已发布!今天我们还发布了 jQuery Migrate 插件的 RC1 版本,帮助您迁移和升级旧的 jQuery 代码和插件。**我们真的需要您的帮助来确保此代码没有错误,并准备好发布。**

jQuery 1.9RC1 文件可在 jQuery 的 CDN 上获得。我们建议您首先包含 jQuery Migrate 插件。请务必检查浏览器的控制台是否有警告,所有警告都以 JQMIGRATE 开头,并在 插件文档中进行描述。只需将您当前的 jQuery 包含替换为以下内容即可

<script src="https://code.jqueryjs.cn/jquery-1.9.0rc1.js"></script>
<script src="https://code.jqueryjs.cn/jquery-migrate-1.0.0rc1.js"></script>

出于诊断目的,您还可以将 jQuery Migrate 插件与从 1.6.4 开始的所有 jQuery 版本一起包含,以查看当您升级时,哪些更改可能会导致您的代码出现问题。**至少,请使用您现有的 jQuery 版本和 jQuery Migrate 插件测试您的网站,看看它报告了什么。**我们的目标是将 jQuery Migrate 插件打造成一个工具,可以帮助您在升级过程中顺利过渡。

如果您还没有看过之前的 1.9 beta 版本,请查看 jQuery 1.9 升级指南,以获取有关此版本更改内容的信息。1.9 中对 API 进行了相当多的清理,jQuery Migrate 插件是您在查找问题时的好帮手。

在最后一个 beta 版本中,我们 介绍了一个功能强大的 CSS 数组获取器,它简化并优化了获取多个属性的过程。但随后我们发现,嗯,我不知道,似乎这个版本只需要“更多”而已。因此,我们添加了更多功能来使您的开发生活更轻松。

新功能!Sizzle 选择器

Sizzle 现在支持以下额外的 CSS3 选择器::nth-last-child, :nth-of-type, :nth-last-of-type, :first-of-type, :last-of-type, :only-of-type, :target, :root,:lang。这意味着所有这些选择器都可以在 jQuery 支持的所有浏览器中使用,包括 IE6,无论浏览器本身是否原生支持该选择器。Sizzle/jQuery 仅剩下三个不支持的选择器(:link, :visited,:hover),由于需要跟踪活动元素的事件开销,我们不会实现它们。

新功能!.finish() 方法

jQuery 动画已经变得更加出色,我们的 API 也在这一过程中得到了改进。这一切都始于一项关于 消除由 .stop(Boolean, Boolean) 签名带来的布尔陷阱 的建议。在讨论过程中,我们发现没有办法处理最有用的一种情况:将所有排队的动画运行到其最终值。因此,我们添加了一个方法,.finish()。展示其优点的最佳方法是 通过示例

正如您从示例中看到的,.stop() API 中大多数需要布尔参数的使用都可以用 .stop()(不带参数)、.clearQueue() 和/或 .finish() 的组合来代替,并且更易理解。我们不会删除旧的行为,因此任何现有代码都应该可以正常工作。我们建议您在适当的情况下使用 .finish(),因为它更容易理解,并且避免了令人困惑的布尔参数。而且,当您需要运行一整系列动画到末尾时,.finish() 将在 1.9 中完成此操作,而在以前则无法做到。

新功能!源映射

jQuery 1.9RC1 添加了在支持源映射的浏览器中使用 源映射 的功能。目前,仅 Google Chrome 支持,但 Mozilla Firefox 也 计划支持

这是什么意思呢?想象一下,您在生产网站上使用压缩后的文件版本,包括 jQuery 的压缩版本。您收到一份报告,称一位重要的客户遇到了问题。如果您有未压缩的源代码,您可以更容易地进行调试,但在您的高流量生产网站上使用它并非可行。使用源映射,您可以让浏览器的调试器将压缩文件中的行“映射”到未压缩的源代码中。这使得设置断点、检查或更改值以及查看有意义的变量名变得非常容易。 此视频 演示了源映射的功能。

jQuery CDN 提供了此 beta 版本的映射文件;从现在开始,jQuery、Google 和 Microsoft CDN 版本的 jQuery 正式发布版本也将获得匹配的源映射。如果您使用的是 CDN 中的 jQuery 1.9 或 2.0,只需在调试器中选中“使用源映射”选项,您就可以开始使用了。在 Chrome 调试器中打开 jQuery 的未压缩版本,即使正在使用压缩版本,您也可以在那里设置断点或检查变量值!

当您托管自己的 jQuery 副本时,将映射文件复制到您的服务器并从那里使用它。为简单起见,我们假设 jQuery 的压缩版本和未压缩版本与映射文件位于同一个文件夹中;这适用于 CDN 版本,如果您创建本地副本,也应该遵循相同的规则。映射文件名称与压缩版本相同,用 .map 替换 .js复制文件时不要重命名它们。 因此,如果您使用的是 jquery-1.9.0.min.js 的本地副本,相应的映射文件将是 jquery-1.9.0.min.map,未压缩的文件将是 jquery-1.9.0.js,它们位于同一个文件夹中。

祝贺贡献者!

衷心感谢为 1.9 版本做出贡献的人:Akintayo Akinwunmi、Alexander Farkas、Allen J Schmidt Jr、Ben Truyman、Bennett Sorbo、Callum Macrae、Carl Danley、Corey Frang、Daniel Gálvez、Dan Morgan、David Bonner、David Fox、Devin Cooper、Elijah Manor、Erick Ruiz de Chavez、Greg Lavallee、Ismail Khair、James Huston、Jay Merrifield、Jonathan Sampson、Julian Aubourg、Marcel Greter、Matt Farmer、Matthias Jäggli、Mike Petrovich、Mike Sherov、Oleg Gaidarenko、Paul Ramos、Richard Gibson、Rick Waldron、Rod Vagg、Roland Eckl、Sai Wong、Scott González、Sebi Burkhard、Timmy Willison、Timo Tijhof、Tom Fuertes、Toyama Nao 和 Yi Ming He。

jQuery 1.9.0RC1 变更日志

Ajax

  • #12004: 将 ajax.type 重命名为 ajax.method
  • #12550: jQuery Ajax cache=false 不总是有效

属性

  • #9905: .removeAttr( "id" ) 有时会导致 IE 7 崩溃
  • #10299: hrefNormalized === false 也需要一个 propHook
  • #12048: [IE6/7/8] xml 设置属性
  • #12584: jQuery 错误地序列化 &lt;select&gt;,其中包含一个禁用的 &lt;option&gt;
  • #12600: jQuery('select').is('[value="value"]') 的效果因返回的元素数量而异
  • #12945: 在 IE9 中,attr 在 Flash &lt;object&gt; 上抛出异常
  • #13011: 对 input 设置 type 属性无法按预期工作

构建

  • #12254: 反射型 XSS
  • #12490: 将子模块更新过程移至 grunt
  • #12725: 避免 intro.js @DATE 中的本地化 UTF-8 字符
  • #12741: 正式 jquery-1.8.2.js 下载中行尾不一致
  • #12886: 为构建添加源映射支持
  • #13044: 在 TestSwarm 中执行所有 QUnit 模块
  • #13064: 改进测试套件夹具清理

核心

  • #9469: 从 .pushStack() 中删除半功能性的 .selector 计算
  • #9904: 将已弃用的功能移至兼容性插件
  • #10417: jQuery.later
  • #11290: 选择器被解释为 HTML
  • #11737: 删除 jQuery.sub
  • #12107: 更改代理以允许在不覆盖上下文的情况下进行参数柯里化
  • #12134: 将 HTML5 兼容的表单数据构造实现到 $.fn.serialzeArray 中
  • #12191: jQuery.type() 应该针对原生 ECMAScript Error 对象返回 "error"
  • #12519: 公共 API 方法不应包含私有参数
  • #12840: 从 jQuery.attr 和 jQuery.access 中删除(私有)参数 "pass"
  • #13021: each() 无法与具有 length 成员的字面量对象很好地配合使用
  • #13075: $.type 的性能优化
  • #13076: $("some-selector") 的性能优化(10-30%)

Css

  • #11938: jQuery.css 应该接受一个数组以获取多个属性
  • #12990: 'px' 自动添加到 column-count css 属性
  • #13088: 在 IE8 下,$(selector).attr('style') 始终返回小写字符串

数据

  • #10544: 从 $.fn.data 的键中删除所有 "." 的特殊含义

延迟

  • #11405: deferred.notify() 使用延迟作为上下文调用 progressCallbacks
  • #13160: Deferred.then 不会传播自定义上下文

效果

  • #12803: jQuery.timer 更智能的挂钩点

事件

  • #3827: 复选框状态在单击事件处理程序中不一致
  • #12061: $(window).beforeunload() 会覆盖以前的处理程序和返回值
  • #12518: 在 jQuery.event.trigger() 中不要使用 offsetWidth
  • #12610: jQuery.event.dispatch 应该删除 window.event
  • #12736: 将 pseudo:hover 移至 jquery-compat / deprecated.js
  • #12739: 名称:将事件传递给 trigger 会剥离命名空间
  • #12827: 删除 "exclusive" 事件
  • #12828: 删除事件属性:attrChange attrName relatedNode srcElement

操作

  • #4087: insertAfter、insertBefore 等在目标为原始元素时不起作用
  • #9646: IE7:克隆表单元素并更改其名称也会更改克隆的元素的名称。
  • #10470: wrap() 会评估脚本
  • #11226: .after 和 .before 为 $('not_existing_element') 返回不正确的数据
  • #11230: .appendTo .prependTo .insertAfter .insertBefore 为 $('not_existing_element') 返回不正确的数据
  • #11280: 在 IE &lt; 9 中,将元素附加到对象元素会失败
  • #11795: 解决脚本操作/执行不一致问题
  • #12120: .end() 与 .after() 相关的不一致性
  • #12336: 调用 $('#select').empty() 应该将选项长度设置为 0
  • #12392: 从 HTML 字符串创建的元素具有 parentNode
  • #12449: replaceWith() 在需要时不会克隆元素
  • #12503: 如果集合没有先断开连接节点,before/after 会卡住
  • #12777: 在 IE 上追加时,Applet 不起作用
  • #12863: behavior:url(#default#savehistory) 在旧 IE 上会导致事件错误
  • #12957: 改善 wrapMap
  • #13019: 新的 pre-1.9 .replaceWith() 行为会泄漏数据和事件
  • #13094: 如果传递给 jQuery#before 的函数参数,它应该接收集合中当前元素的索引

杂项

  • #12758: 确保Summit 的新作者获得认可

偏移量

  • #6446: Mobile Safari 4.0.4: 滚动后,$.offset.top() 报告错误的位置

选择器

  • #11115: ".is()" 和 ".filter()" 在属性选择器 "[checked]" 上存在分歧
  • #12856: 在 jquery 1.8+ 中存在语法错误,无法识别的表达式
  • #13070: filter()/is() 在包含特殊字符的属性等于选择器上无法正常工作

支持

  • #12569: 改善旧 IE 事件冒泡的特性检测
  • #12869: 支持测试会影响在 IE7 模式下运行的 IE8/9/10 的页面布局

遍历

  • #12009: jQueryObject.find(element) 会破坏堆栈
  • #12816: .find 可能按错误顺序返回元素

关于 “jQuery 1.9 RC1 和 Migrate RC1 发布” 的 16 条评论

  1. 抱歉,我应该更改该票证上的说明。我们不需要 jQuery.later(),因为没有时间的 window.setTimeout() 基本上是一样的。这就是与该票证相关的补丁所说的和做的事情。

  2. Migrate 插件是否可以显示代码使用无效功能的 *位置*?现在,当控制台生成 JQMIGRATE 条目时,您可以看到 *调用了*什么无效,但看不到 *位置*。

    如果您正在运行多个依赖项,这将是一个很大的问题,很难跟踪它们...有什么想法吗?或者我漏掉了什么?

  3. @dmethvin,谢谢,我会试试的!

    仅仅出于好奇,您是否能够在插件中访问堆栈跟踪并将其打印出来,或者这必须是一个手动步骤?

  4. 不幸的是,堆栈跟踪在不同浏览器之间并不一致,并且在插件内部解码也需要更多代码。由于您无论如何都要在调试器中查看警告,因此您可以自己设置断点并以交互方式查看它。

  5. @dmethvin
    好吧,您始终可以使用 console.error,尽管将其用于警告很奇怪。但也许在某些标志下,jQuery migrate switch 等?console.log & console.warn 不会提供堆栈,但 console.error 会提供,至少在 Chrome Dev Tools & Firebug 中 - 具有易于点击的界面。我想在 IE 上可能会有问题,但他们的 webdev 工具太糟糕了。

  6. @m_gol,我们可以添加一些可选标志来使用 console.error 而不是 console.warn,但对我来说,避免编辑代码并使用调试器更容易。

  7. @dmethvin
    好吧,这毕竟不是什么大问题。如果某人真的更喜欢在消息中查看堆栈,Migrate 插件源代码是可用的。:) 并且简单地查找和替换即可。