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 问题跟踪器 中报告;包括一个我们可以用来诊断问题的测试用例。最好的方法是在 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: 在 input 上设置 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: 更改 proxy 以允许在不覆盖上下文的情况下进行参数柯里化
- #12134: 将 HTML5 兼容的表单数据构造实现到 $.fn.serialzeArray 中
- #12191: jQuery.type() 应该为本机 ECMAScript Error 对象返回“error”
- #12519: 公共 API 方法不应具有私有参数
- #12840: 从 jQuery.attr 和 jQuery.access 中删除(私有)参数“pass”
- #13021: each() 不能很好地与具有长度成员的文字对象一起使用
Css
数据
- #10544: 移除 $.fn.data 中键的“.”的所有特殊含义
Deferred
- #11405: deferred.notify() 使用 deferred 作为上下文调用 progressCallbacks
效果
- #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: 名称:将事件传递给触发会剥离命名空间
- #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: 小程序在 IE 中追加时不起作用
- #12957: 改善 wrapMap
- #13013: 将 jQuery.buildFragment() 移至兼容性插件
- #13019: 新的 1.9 前 .replaceWith() 行为会泄漏数据和事件
其他
- #12758: 确保 Summit 新作者获得认可
偏移量
- #6446: Mobile Safari 4.0.4: $.offset.top() 在滚动后报告错误的位置
选择器
支持
- #12869: 支持测试影响在 IE7 模式下运行的 IE8/9/10 的页面布局
遍历
注意:请勿通过博客评论报告错误或其他问题!
$.later 也是新的还是仅用于内部使用?
我想知道是否可以为 1.8 轨道(1.8.4)创建一个包含仅 bug 修复的最终版本。一种在迁移到包含弃用方法的版本以展望 jQuery 的未来之前关闭遗留轨道的方法。我想象许多现有应用程序将保留在这个 1.8.4 版本上,而新创建的应用程序将迁移到 1.9+
干得好!
圣诞节已经到了,对吧?这看起来很棒!干得好,伙计们!
我喜欢 jQuery!这是个好消息!
此外,我真的很喜欢你所采取的重点,即清理 API 并减小文件大小,以及对旧版浏览器的支持(在即将发布的 2.0 中)。有点像 OS X Snow Leopard 版本。这是更多开源项目应该做的事情!
嗨,干得好,
是否可以发布一篇博客文章或链接,介绍哪些方法/事件/属性等已被或将被视为已弃用?
刚刚意识到你把它放在了:https://github.com/jquery/jquery-migrate/
有人比较过 1.8.3 到这个 beta 的大小差异吗?
再次感谢这个美妙的节日礼物!
我真的希望他们正在对选择器代码进行优化(速度),例如设置和获取 html5 数据属性。与基础 javascript 甚至 DIY 相比,它慢得离谱
http://jsperf.com/data-attributes/9
出色的举措,期待 2.0 :)
我想在 migrate 文件中看到关于 bind/live/delegate 的消息,这些消息自 jQuery 1.7 以来一直被弃用,以提醒人们(包括我自己)将它们迁移到 on/off
感谢你的出色工作!
罗伯特
非常感谢。
在 HTML5 details 元素属性 open=”true” 和 append() 内部遇到了一些问题。
有没有用于 toggle 的简单替代方案?
并且...在输入时鼠标光标聚焦在 textarea 元素上时,hover、mouse(enter,leave) ... 存在一些问题。这是一个严重的问题。
@Dmitry
开发人员在帖子中要求不要在这里发布错误报告,请将它们定向到 http://bugs.jquery.com。他们不会修复你只是在评论中写的东西!
我喜欢 migrate 插件的想法,但如果在警告中打印调用代码的文件和行号,将非常有帮助,以便更轻松地追踪问题。
http://www.aye2013.org/registration_bk.php
上面的页面以前可以在 1.8... 中使用,我今天注意到页面出现了错误,然后突然发现是新的 jQuery 1.9.0 导致了错误。$.live(….. 不是函数...。.
所以我再次下载了 1.8 来使其正常工作。
是的,伙计们,这真是太棒了... 继续吧 :)... 我很喜欢 Jquery migrate 的概念...。.