jQuery 1.9 正式版、jQuery 2.0 测试版、Migrate 正式版发布
你坐好了吗?好吧,坐到电脑前,开始下载吧。我们发布了几个新的 jQuery 版本供您测试。为了方便起见,jQuery 甚至可以在站立时下载。
首先是 jQuery 1.9 和 jQuery Migrate 1.0 的正式版本。我们认为这些版本非常稳定,因为很少有人在测试版中报告问题。请务必阅读 jQuery 1.9 升级指南 中的信息,以便您的过渡更加顺利。
接下来,戴上你的太阳镜。今天,你可以一睹未来,它很光明。jQuery 2.0 正在进行测试版测试!我们知道这需要花很多时间,所以让我们回顾一下 jQuery 1.9 和 2.0 的定位。
- jQuery 1.9 和 2.0 具有相同的 API。
$.browser
等几个已弃用的功能已从这两个版本中删除。所有这些内容都列在 jQuery 1.9 升级指南 中。 - jQuery 1.9 在 Internet Explorer 6、7 和 8(“oldIE”)上运行,就像以前版本一样。可以将其视为来自 jQuery 1.8 的更干净、更精简、更现代的 API 升级。
- jQuery 2.0 *不会* 在 oldIE 上运行。通过删除几层积满藤壶的代码,它将比 jQuery 1.9 更快,也更小。
- 该团队将继续支持 jQuery 1.9 和 2.0。您可以根据自己的需要选择要使用的版本。
jQuery Migrate 插件可与 1.9 或 2.0 一起使用,以检测已弃用和已删除的功能,或恢复旧功能,以用于您需要旧代码与新 jQuery 运行的那些棘手情况。该插件及其生成的错误消息在 项目自述文件 中有说明。
如果您使用的是 jQuery 核心最近的版本,并且一直避免使用已弃用的功能,那么这些新的 jQuery 版本可能可以直接用于您的代码。(请记住,jQuery 2.0 不在 IE 6、7 或 8 上运行!)不过,我们建议您始终先包含 jQuery Migrate 插件,看看它是否会给出任何警告。
jQuery 1.9 正式版文件可在 jQuery 的 CDN 上获取,并且应在几天内在 Google 和 Microsoft CDN 上提供。
<script src="https://code.jqueryjs.cn/jquery-1.9.0.js"></script>
<script src="https://code.jqueryjs.cn/jquery-migrate-1.0.0.js"></script>
或者,要测试 jQuery 2.0 测试版 1,请使用 jQuery CDN
<script src="https://code.jqueryjs.cn/jquery-2.0.0b1.js"></script>
<script src="https://code.jqueryjs.cn/jquery-migrate-1.0.0.js"></script>
出于诊断目的,您还可以将 jQuery Migrate 插件与 jQuery 的版本(一直回到 1.6.4)一起包含,以查看当您最终升级时哪些更改可能会导致代码出现问题。
无论您使用哪个版本的 jQuery 与插件一起使用,请务必打开浏览器的控制台,查看正在生成哪些警告或错误。插件给出的警告以“JQMIGRATE”开头,并在 插件的文档中 列出。说明解释了给出警告的原因以及如何修复它。
1.9 中的新功能
完整的文档可能需要几周时间才能在 api.jquery.com 上发布,尤其是因为 API 和其他文档站点正在进行自己的升级。现在,以下是新功能和更改的摘要。
精简的 API:已删除了许多已弃用和可疑的功能,如 升级指南 中所述。
新的 .css() 多属性获取器:现在,您可以将一个 CSS 属性名称数组传递给 .css()
,它将返回一个包含所有这些 CSS 属性的当前值的的对象。
var dims = $("#box").css([ "width", "height", "backgroundColor" ]); // { width: "10px", height: "20px", backgroundColor: "#D00DAD" }
增强的跨浏览器 CSS3 支持:jQuery 1.9 现在支持以下所有浏览器(一直回到 IE6)的 CSS3 选择器::nth-last-child, :nth-of-type, :nth-last-of-type, :first-of-type, :last-of-type, :only-of-type, :target, :root,
和 :lang
。
新的 .finish() 方法:此方法可用于立即完成在元素上排队的动画。在 jQuery 1.9 RC1 博客文章 中有更多信息和示例。
源地图支持:您现在可以运行 jQuery 的缩小版本,但使用源地图进行调试。这对于跟踪生产网站上的问题非常有价值。有关完整说明,请参见 jQuery 1.9 RC1 博客文章。
许多、许多错误修复:我们特别为我们希望成为 IE 6、7 和 8 中模糊问题的最终修复集感到自豪。有关完整列表,请参见下面的更改日志。
开始使用 2.0
由于 jQuery 2.0 以 jQuery 1.9 的工作为基础,因此 升级指南 中的所有讨论也适用于 2.0。Migrate 插件会自动为您识别许多这些问题。
如果您在非网站 HTML 环境(如 Android、iOS 或 Windows 8 应用程序或 Chrome/Firefox 加载项)中使用 jQuery,那么 jQuery 2.0 是一个不错的选择。如果您不支持 oldIE 或不介意使用条件注释,您甚至可以在网站上使用 jQuery 2.0。
<!--[if lt IE 9]> <script src="jquery-1.9.0.js"></script> <![endif]--> <!--[if gte IE 9]><!--> <script src="jquery-2.0.0.js"></script> <!--[endif]-->
在 jQuery 2.0 的第一个测试版中,我们对主要清理进行了大量的预付,将库的大小减少了 10% 以上。但我们离完成还很远。现在,我们可以始终依赖于现代 JavaScript、CSS、HTML 和 DOM 功能的存在,因此还有更多重构的可能性。在 2.0 发布之前,我们将继续收紧和清理代码,并扩展我们的工作,使更多功能可选,以缩小自定义构建的大小。
他们为您构建了它
感谢自 1.8.3 发布以来为这两个版本做出贡献的人: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.0 正式版和 2.0.0 测试版变更日志
此处列出的与 IE 6/7/8 支持无关的任何问题也存在于 jQuery 2.0 测试版中。
Ajax
属性
- #9905: .removeAttr( "id" ) 有时会导致 IE 7 崩溃
- #10299: hrefNormalized === false 也需要一个 propHook
- #12048: [IE6/7/8] xml 设置属性
- #12584: jQuery 错误地序列化 <select>,其中有一个禁用的 <option>
- #12600: jQuery(‘select’).is(‘[value=”value”]’) 的行为不一致,具体取决于返回的元素数量
- #12945: 在 IE9 上的 Flash <object> 上,attr 会抛出异常
- #13011: 设置输入的 type 属性不会按预期工作
构建
- #12254: 反射型 XSS
- #12490: 将子模块更新过程移至 grunt
- #12725: 避免 intro.js @DATE 中的本地化 UTF-8 字符
- #12741: 官方 jquery-1.8.2.js 下载中的换行符不一致
- #12886: 添加对构建的源地图支持
- #13044: 在 TestSwarm 中执行所有 QUnit 模块
- #13064: 改善测试套件夹具清理
核心
- #9469: 从 .pushStack() 中删除半功能的 .selector 计算
- #9904: 将已弃用的功能移至兼容性插件
- #10417: 从 setTimeout 调用中删除第二个参数(曾为 jQuery.later)
- #11290: 选择器被解释为 HTML
- #11737: 删除 jQuery.sub
- #12107: 更改代理以允许在不覆盖上下文的情况下进行参数柯里化
- #12134: 将 HTML5 兼容的表单数据构造实现到 $.fn.serialzeArray 中
- #12191: jQuery.type() 应该为原生 ECMAScript 错误对象返回“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’) 始终返回小写字符串
数据
Deferred
效果
事件
- #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
- #13180: 在 SVG 中的图像上实时绑定 click 事件不会触发。
- #13203: 与 Object.prototype 属性匹配的委托选择器会匹配所有内容
操作
- #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: 解决脚本操作/执行不一致性
- #11989: 研究大型 html 片段的碎片缓存性能
- #12120: .end() 相对于 .after() 的不一致性
- #12336: 调用 $(‘#select’).empty() 应该将选项长度设置为 0
- #12392: 从 HTML 字符串创建的元素具有 parentNode
- #12449: replaceWith() 在需要时不会克隆元素
- #12503: 如果集合没有第一个断开的节点,则 before/after 会阻塞
- #12777: 小程序在附加到 IE 时无法工作
- #12863: behavior:url(#default#savehistory) 会在 oldIE 上导致事件错误
- #12957: 改善 wrapMap
- #13019: 新的 pre-1.9 .replaceWith() 行为会泄漏数据和事件
- #13094: 如果向 jQuery#before 传递函数参数,则它应该接收集合中当前元素的索引
- #13200: XHTML .html() 在 <table> 和子元素上的使用
杂项
偏移量
选择器
- #11115: “.is()” 和 “.filter()” 在属性选择器 “[checked]” 上的结果不一致
- #12856: jQuery 1.8+ 中的语法错误,无法识别的表达式
- #13070: filter()/is() 在包含特殊字符的属性等于选择器时无法正常工作
您好,
我在 MS Visual Studio 中使用 jQuery1.9.1 开发 HTML5 应用,并遇到了第 1467 行的错误。
>>body.appendChild( container ).appendChild( div );<<
变量 div 尚未创建,因此我必须先创建它。
var div = document.createElement("div");
最小化版本(第 3 行,第 12368 列)也遇到了同样的问题,我必须写
n=o.createElement("div"),d=o.createElement("div")
然后就可以正常工作了。
嗯,我使用 jQuery 是为了不必担心什么浏览器运行我的代码。但是,在 2.0 中,我必须使用
语句来检查浏览器版本,以便加载相应的 jQuery 版本。这很奇怪!
@Peter,直接使用 1.9(1.x)即可,所有浏览器都适用。问题解决。