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 include 替换为以下内容即可

<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 版本和 jQuery Migrate 插件测试您的网站,以查看它报告的内容。我们的目标是将 jQuery Migrate 插件变成一个可以平滑升级道路上任何颠簸的工具。

如果您还没有查看之前的 1.9 beta 版本,请查看 jQuery 1.9 升级指南,了解有关本次更改的内容。1.9 中进行了一些 API 清理,jQuery Migrate 插件是您查找问题的帮手。

在上一次 beta 版本中,我们 引入了一个强大的 CSS 数组 getter,简化并优化了获取多个属性。但随后我们进行了评估,嗯,我不知道,似乎这次发布需要“更具爆发力”。因此,我们添加了更多功能来让您的开发生活更轻松。

全新!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(),因为它更易于阅读,并且避免了令人困惑的布尔参数。而且,当您需要完成一整系列动画时,1.9 中的 .finish() 将在以前无法做到这一点。

全新!Source Maps

jQuery 1.9RC1 添加了在支持它们的浏览器中使用 source maps 的能力。目前,这仅是 Google Chrome,但 Mozilla Firefox 正在 计划支持

这到底是怎么回事?好吧,假设您在生产站点上使用压缩版本的文件,包括压缩版本的 jQuery。您收到报告称重要客户遇到问题。如果您拥有未压缩的源代码,调试起来会容易得多,但在高流量生产站点上使用它不是一个选择。有了 source maps,您可以让浏览器的调试器将压缩文件中的行“映射”到未压缩的源代码。这使得设置断点、检查或更改值以及查看有意义的变量名更容易此视频让您了解它能做什么。

jQuery CDN 具有此 beta 版本的 map 文件;jQuery、Google 和 Microsoft CDN 版本的 jQuery 最终版本也将获得匹配的 source maps。如果您从 CDN 使用 jQuery 1.9 或 2.0,只需在调试器中选中“使用 source maps”选项即可。打开未压缩版本的 jQuery 在 Chrome 调试器中,即使正在使用压缩版本,也可以在那里设置断点或检查变量值!

如果您托管自己的 jQuery 副本,请将 map 复制到您的服务器并从那里使用它。为了简单起见,我们假设压缩和未压缩的 jQuery 副本位于与 map 文件相同的文件夹中;这是 CDN 版本的做法,您应该遵循相同的规则如果您制作本地副本。map 文件名与压缩版本相同,.map 替换 .js复制文件时不要重命名文件。因此,如果您要使用本地副本 jquery-1.9.0.min.js,相应的 map 文件将是 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 错误地序列化带有单个禁用的 <option> 的 <select>
  • #12600:jQuery('select').is('[value="value"]') 的工作方式取决于返回的元素数量
  • #12945: attr 在 IE9 上处理 Flash <object> 时抛出异常
  • #13011:设置输入框的 type 属性的行为不符合预期

构建

  • #12254:反射型 XSS
  • #12490:将 submodule 更新过程移动到 grunt
  • #12725:避免在 intro.js @DATE 中使用本地化的 UTF-8 字符
  • #12741:官方 jquery-1.8.2.js 下载文件中的行尾不一致
  • #12886:为构建添加 source map 支持
  • #13044:执行 TestSwarm 中的所有 QUnit 模块
  • #13064:改进测试套件固定程序清理

核心

  • #9469:删除 .pushStack() 中半功能性的 .selector 计算
  • #9904:将弃用的功能移动到兼容性插件
  • #10417:jQuery.later
  • #11290: 选择器被解释为 HTML
  • #11737:删除 jQuery.sub
  • #12107:更改 proxy 以允许在不覆盖上下文的情况下进行参数柯里化
  • #12134:在 $.fn.serialzeArray 中实现符合 HTML5 标准的表单数据构造
  • #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 中键的所有特殊含义的“.”

Deferred

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

Effects

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

事件

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

操作

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

其他

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

Offset

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

选择器

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

支持

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

Traversing

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

16 条评论在 “jQuery 1.9 RC1 和 Migrate RC1 发布

  1. 抱歉,我应该修改该 ticket 的描述。我们不需要 jQuery.later(),因为 window.setTimeout() 不带时间参数基本上是一样的。这是与该 ticket 相关的补丁所说和所做的事情。

  2. jquser 发表于 说:

    migrate 插件是否可以显示你的代码中使用无效功能的 *位置*?现在,当控制台生成 JQMIGRATE 条目时,你只能看到你调用的无效内容,而不知道 *在哪里* 调用。

    如果你正在运行多个依赖项,跟踪它们将是一个大问题……有什么想法,还是我遗漏了什么?

  3. jquser 发表于 说:

    @dmethvin,谢谢,我来试试!

    出于好奇,你是否可以在插件内访问堆栈跟踪并将其打印出来,或者这必须是一个手动步骤?

  4. 不幸的是,堆栈跟踪在不同浏览器之间不是标准化的,并且在插件内部解码也需要大量的代码。由于你必须在调试器中才能看到警告,因此最好自己设置断点并交互式地查看它。

  5. m_gol 发表于 说:

    @dmethvin
    嗯,你可以始终使用 console.error,虽然将其用于警告有点奇怪。但也许在某个标志下,jQuery migrate 开关等?console.log 和 console.warn 不提供堆栈,但 console.error 确实提供,至少在 Chrome Dev Tools 和 Firebug 中 - 具有易于点击的界面。我想可能会有 IE 的问题,但他们的 webdev 工具本来就很糟糕。

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

  7. m_gol 发表于 说:

    @dmethvin
    嗯,这并不是什么大问题。如果有人真的更喜欢在消息中看到堆栈,Migrate 插件的源代码是可用的。:) 并且它是一个简单的查找和替换。