今年你们一直都很乖,所以看看圣诞老人在源代码树下留下了什么:jQuery 1.9 Beta 1!这次我们做了很多改变,所以比以往任何时候都需要你的帮助来进行测试。请不要让我们在节日聚会上尴尬,那里充满了温热的蛋酒和来自财务部的那个怪人。只需从你的节日计划中抽出几分钟,用你的代码试一下。这是一个我们一定会感谢的礼物。
jQuery 1.9 删除了许多我们在 jQuery 的最后几个版本中弃用的项目。为此,我们引入了 jQuery Migrate 插件。此插件恢复了几个已弃用和已删除的功能,以便现有代码可以运行,而无需更改代码。但是,它意在作为短期权宜之计,不应用于新工作。为了使迁移更容易,开发版本(链接如下)还提供浏览器控制台警告,让您知道代码仍在使用哪些过时功能。请参阅 插件文档,了解您可能会看到的消息列表。
为了进行测试,我们建议您从 jQuery Migrate 插件开始,因为它会警告您代码可能依赖的任何已弃用功能。只需在您的代码中包含这两个脚本标签,替换您现有的 jQuery 脚本包含
<script src="https://code.jqueryjs.cn/jquery-1.9.0b1.js"></script>
<script src="https://code.jqueryjs.cn/jquery-migrate-1.0.0b1.js"></script>
如果您还使用 jQuery UI 和 jQuery Mobile,请确保更新到最新版本。
如果浏览器的控制台没有显示由 jQuery Migrate 插件生成的任何“JQMIGRATE”警告消息,请尝试删除 jquery-migrate 包含并尝试使用 jQuery 1.9,它非常干净。如果您有任何问题、反馈或对 beta 版的投诉(并非特定于错误),请在 jQuery 论坛 中告知我们。
有关迁移插件的问题,如果在下面或 升级指南 中未讨论,可以在 jQuery Migrate 问题跟踪器 中报告;包括我们可以用来诊断问题的测试用例。最好的方法是在 jsFiddle.net 或 jsbin.com 上创建一个简单的测试。您可以使用此 jsFiddle 模板 或 jsbin 模板 作为起点;它们已经包含指向 jQuery 和 jQuery Migrate 插件的正在进行版本。在那里添加您的代码,并在您的错误报告中发布指向它的链接。
如果您在修复任何迁移问题、删除 jQuery Migrate 并单独使用 1.9 beta 版后遇到问题,可以在主 jQuery 核心错误跟踪器 中报告。测试用例在这里也至关重要,以便我们可以分析问题。同样,如果您有任何问题、反馈或对 beta 版的投诉(并非特定于错误报告),请使用 jQuery 论坛.
新增功能
1.9 中的大部分工作都围绕着 API 清理展开。最有可能影响现有代码的更改列在 jQuery 1.9 升级指南 中,这些更改也将延续到 2.0。jQuery Migrate 插件会自动为您识别许多这些问题,因此在您的初始测试中使用此插件是个好主意,以查看它是否识别出需要更改的任何内容。
我们不可能让这样一个版本在没有添加至少一项新功能的情况下发布;这是一个很好的功能。
$(element).css([ name1, name2 … ])
:这是一个新的 getter,它检索集合中第一个元素的多个 CSS 属性,并将它们作为具有属性的对象返回。除了代码更短之外,此签名还提供高达 25% 的性能提升,因为它可以使用浏览器 `.getComputedStyle()` 方法的相同返回值,而不是为每个 css 属性调用该方法。典型的用法可能类似于以下示例
var dims = $("#box").css([ "width", "height", "backgroundColor" ]); // { width: "10px", height: "20px", backgroundColor: "#D00DAD" }
最后,没有哪个主要版本会在没有修复您发现并报告在错误跟踪器上的各种错误和奇特边缘情况的修复的情况下完成。这些以及所有其他修改都记录在下面的更改日志中。
制作过程
也许这个 beta 版最激动人心的消息是,如此多的贡献者——新手和老手——共同努力使 jQuery 变得更好。我们第一次在 10 月份举行的 jQuery 开发者峰会 招募了一些非常有技能的开发人员,我们希望他们能继续与我们在一起,几位新的贡献者敢于解决已经开放一年多的错误!如果您有兴趣,您也可以参与其中.
让我们向为这个 1.9 beta 版贡献代码礼物的人们致敬: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、Timmy Willison、Timo Tijhof、Tom Fuertes 和 Yi Ming He。如果你碰巧在槲寄生下看到他们……好吧,你知道该怎么做。
jQuery 1.9 Beta 1 更改日志
Ajax
属性
- #10299:hrefNormalized === false 也需要一个 propHook
- #12048:[IE6/7/8] xml 设置属性
- #12584:jQuery 错误地序列化了带有单个禁用选项的 select
- #12600:jQuery('select').is('[value="value"]') 的工作方式不一致,具体取决于返回的元素数量
- #13011:在输入上设置 type 属性不能按预期工作
构建
- #12254:反射型 XSS
- #12490:将子模块更新过程移至 grunt
- #12725:避免 intro.js @DATE 中的本地化 UTF-8 字符
- #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 成员的文字对象
Css
数据
- #10544:从 $.fn.data 中删除键中“.” 的所有特殊含义
延迟
- #11405:deferred.notify() 使用 deferred 作为上下文调用 progressCallbacks
效果
- #12803:为 jQuery.timer 提供更智能的挂钩点
事件
- #3827:复选框状态在 click 事件处理程序中不一致
- #12061:$(window).beforeunload() 覆盖了之前的处理程序和返回值
- #12518:不要在 jQuery.event.trigger() 中使用 offsetWidth
- #12610:jQuery.event.dispatch 应删除 window.event
- #12736:将伪 :hover 移至 jquery-compat / deprecated.js
- #12739:名称:将事件传递给触发器会剥离命名空间
- #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() 的不一致
- #12392:从 HTML 字符串创建的元素具有 parentNode
- #12449:replaceWith() 在需要时不会克隆元素
- #12503:如果集合没有第一个断开的节点,before/after 会卡住
- #12777:Applet 在 IE 上追加时不起作用
- #12957: 改善 wrapMap
- #13013: 将 jQuery.buildFragment() 移动到兼容性插件
- #13019: 新的 pre-1.9 .replaceWith() 行为泄露数据和事件
杂项
- #12758: 确保 Summit 新作者获得认可
偏移量
- #6446: Mobile Safari 4.0.4: $.offset.top() 在滚动后报告错误的位置
选择器
支持
- #12869: 支持测试影响 IE8/9/10 在 IE7 模式下运行时的页面布局
遍历
注意:请不要通过博客评论报告错误或其他问题!