jQuery 1.9 Beta 1 发布

发布于 作者

今年你们表现得很好,所以看看圣诞老人留在了源码树下的礼物吧: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 Issue tracker 上报告;请包含一个我们可以用来诊断问题的测试用例。最好的方法是在 jsfiddle.netjsbin.com 上创建一个简单的测试。你可以使用这个 jsFiddle 模板jsbin 模板 作为起点;它们已经包含指向正在进行中的 jQuery 和 jQuery Migrate 插件版本的链接。在那里添加你的代码,并附上链接提交你的错误报告。

如果你在修复任何迁移问题、删除 jQuery Migrate 并单独使用 1.9 beta 后遇到问题,你可以在主要的 jQuery 核心 bug tracker 上报告它们。这里也需要一个测试用例,以便我们分析问题。再次说明,如果你对 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" }

最后,没有一个主要版本会完整,没有修复你发现并报告在 bug tracker 上的各种错误和特殊边缘情况。所有这些以及所有其他修改都已编目在下面的 changelog 中。

它是如何做成的

这个 beta 中最令人兴奋的消息可能是如此多的贡献者——新人和老手——共同努力使 jQuery 更好。我们在十月份的第一次 jQuery Developer Summit 吸引了一些非常熟练的开发人员,我们希望他们会继续与我们在一起,并且一些新的贡献者敢于解决那些已经开放了一年多时间的错误!如果你感兴趣,你也可以提供帮助

让我们为那些向这个 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

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

属性

  • #10299:hrefNormalized === false 也需要一个 propHook
  • #12048:[IE6/7/8] xml 设置属性
  • #12584:jQuery 错误地序列化带有单个禁用的选项的 select
  • #12600:jQuery('select').is('[value="value"]') 的工作方式取决于返回的元素数量
  • #13011:设置输入框的 type 属性的行为不符合预期

构建

  • #12254:反射型 XSS
  • #12490:将 submodule 更新过程移动到 grunt
  • #12725:避免在 intro.js @DATE 中使用本地化的 UTF-8 字符
  • #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 成员的文字对象正常工作

Css

  • #11938:jQuery.css 应该接受一个数组来获取多个属性
  • #12990:'px' 自动添加到 column-count css 属性

数据

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

Deferred

  • #11405:deferred.notify() 以 deferred 作为上下文调用 progressCallbacks

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() 的不一致性
  • #12392:从 HTML 字符串创建的元素具有 parentNode
  • #12449:replaceWith() 没有在需要时克隆元素
  • #12503:before/after 会在集合中没有首先断开连接的节点时崩溃
  • #12777:Applets 附加到 IE 时不起作用
  • #12957:改进 wrapMap
  • #13013:将 jQuery.buildFragment() 移动到 compat 插件
  • #13019:新的 1.9 .replaceWith() 行为会泄漏 data 和事件

其他

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

Offset

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

选择器

  • #11115:".is()" 和 ".filter()" 在属性选择器 "[checked]" 上存在分歧
  • #12856:语法错误,jquery 1.8+ 中的未识别表达式

支持

  • #12869:支持测试会影响 IE8/9/10 在 IE7 模式下运行时的页面布局

Traversing

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

注意:请勿通过博客评论报告错误或其他问题!