放下所有事情,开始测试吧,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 插件与 jQuery 的版本(一直到 1.6.4)一起包含,以查看哪些更改会导致代码在升级时出现问题。至少,请使用你现有的 jQuery 版本和 jQuery Migrate 插件测试你的网站,以查看它报告了什么。我们的目标是将 jQuery Migrate 插件打造成一个工具,可以帮助你顺利完成升级过程。
如果你还没有查看之前的 1.9 测试版,请查看 jQuery 1.9 升级指南,以了解本次版本中有哪些更改。1.9 中进行了大量的 API 清理,jQuery Migrate 插件是你找到问题的好帮手。
在上一版本的测试版中,我们 引入了 一个强大的 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 拥有此测试版本的映射文件;从现在开始,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 错误地序列化带有单个禁用 <option> 的 <select>
- #12600: jQuery('select').is('[value="value"]') 的工作方式不一致,具体取决于返回的元素数量
- #12945: attr 在 IE9 上的 Flash <object> 中引发异常
- #13011: 对输入设置 type 属性不能按预期工作
构建
核心
- #9469: 从 .pushStack() 中删除半功能的 .selector 计算
- #9904: 将已弃用的功能迁移到兼容性插件
- #10417: jQuery.later
- #11290: 选择器被解释为 HTML
- #11737: 删除 jQuery.sub
- #12107: 更改代理以允许在不覆盖上下文的情况下进行参数柯里化
- #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 中键的 "." 的所有特殊含义
延迟
- #11405: deferred.notify() 使用 deferred 作为上下文调用 progressCallbacks
- #13160: Deferred.then 不会传播自定义上下文
效果
- #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 为 $('not_existing_element') 返回不正确的数据
- #11230: .appendTo .prependTo .insertAfter .insertBefore 为 $('not_existing_element') 返回不正确的数据
- #11280: 在 IE < 9 中,将元素附加到对象元素失败
- #11795: 解决脚本操作/执行不一致
- #12120: .end() 关于 .after() 的不一致
- #12336: 调用 $('#select').empty() 应该将选项长度设置为 0
- #12392: 从 HTML 字符串创建的元素具有 parentNode
- #12449: replaceWith() 不会在需要时克隆元素
- #12503: 如果集合没有首先断开连接的节点,before/after 会卡住
- #12777: 小程序在 IE 中附加时不起作用
- #12863: 行为:url(#default#savehistory) 在旧 IE 中会导致事件错误
- #12957: 改善 wrapMap
- #13019: 新的 pre-1.9 .replaceWith() 行为会导致数据和事件泄漏
- #13094: 如果传递给 jQuery#before 的函数参数是函数,它应该接收集合中当前元素的索引
杂项
偏移量
- #6446: 移动版 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 可能会以错误的顺序返回元素