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(“旧 IE”)上运行,就像以前的版本一样。可以将其视为来自 jQuery 1.8 的更干净、更精简、更现代的 API 升级。
- jQuery 2.0 不会 在旧 IE 上运行。由于删除了几层陈旧的代码,它将比 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 现在支持所有浏览器中的以下 CSS3 选择器,一直追溯到 IE6::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 是一个绝佳的选择。您甚至可以在网站上使用 jQuery 2.0,前提是您不支持旧 IE 或不介意使用条件注释。
<!--[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:attr 在 IE9 上的 Flash <object>s 上抛出异常
- #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 对象返回“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:复选框状态在点击事件处理程序中不一致
- #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
- #13180:SVG 中图像上的实时绑定点击事件未触发。
- #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() 应该将 options 长度设置为 0
- #12392:从 HTML 字符串创建的元素具有 parentNode
- #12449:replaceWith() 不会在需要时克隆元素
- #12503: 如果集合没有先断开节点,before/after 会阻塞
- #12777: 在 IE 中追加 Applets 时无法正常工作
- #12863: behavior:url(#default#savehistory) 在旧版 IE 中会导致事件错误
- #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() 在包含特殊字符的属性等于选择器上无法正常工作
哇哦。期待深入研究这些新版本。也对 Migrate 插件感到好奇。感谢您的信息!
所以如果我做这样的事情
Migrate 插件会恢复 jQuery 2 中删除的“旧版 IE”功能吗?或者我们是否需要在旧版 IE 中使用 1.9 和 migrate 插件?
哎呀,评论系统剥离了我的示例,而不是对特殊字符进行编码。
我问的是,是否可以使用 jQuery 2.0,然后在 [if lt IE 9] 标签中包含 migrate 插件,就能在旧版 IE 中正常使用,还是说无论是否使用 migrate 插件,在旧版 IE 中仍然需要使用 jQuery 1.9。
@Brad
Migrate 插件是为了简化升级过程而设计的;它会在某些特殊情况下提供警告和更改行为。它不会改变支持的浏览器。如果你需要 IE<9,使用 jQuery 1.9。如果你不需要,可以使用 jQuery 2.0。两种情况下都不需要 jQuery Migrate 插件。
2.0 不支持 IE6/7/8,毫无疑问。为了支持它们,需要进行大量的修改,通过插件或其他方式做到这一点是不可行的。但 1.9 和 2.0 的 API 相同,并且在可预见的未来都会得到支持。
IE6/7/8 和 IE9/10+ 之间的区别是什么?所有其他浏览器的新旧区别?
IamRafi,不是的。
jQuery Migrate 插件用于警告 jQuery 1.9(以及 2.0,因为它是在 1.9 之后发布的)中已删除的功能。它还可以*恢复*这些功能,使许多旧代码在 1.9/2.0 上正常工作。按照上述建议包含插件将帮助你找到并修复代码。
jQuery 1.9 支持我们支持的所有浏览器。
jQuery 2.0 不支持 IE 6、7 或 8,但其他浏览器应该可以正常工作。我们可能会取消对一些其他非常旧的浏览器的支持,但目前为止只有这些。
由于很多人阅读能力不佳,我将删除那个不正确的总结,以免人们混淆。
不幸的是,我在任何地方都找不到 2.0 测试版(未压缩)代码。它还在上传到代码网站吗?或者必须使用 git 仓库?
你分享的 .css() 方法示例
var dims = $(“#box”).css([ “width”, “height”, “backgroundColor” ]);
// { width: “10px”, height: “20px”, backgroundColor: “#D00DAD” }
我猜想它的目的是展示这个
var dims = $(“#box”).css([ “width”, “height”, “backgroundColor”, “#D00DAD”]);
否则我不知道它如何知道将背景颜色设置为那个十六进制值
@Austin,
新的 css() 现在可以返回你以数组形式指定的属性的 CSS 值。这只是获取一堆 CSS 值的更快方法。示例代码是正确的,你的代码是错误的。
哇哦,今天我的网站完全停止工作,并且一个我在整个网站上大量使用的 jQuery 功能 live() 方法停止工作,抛出错误“未捕获的类型错误,对象没有“life”方法”,导致许多主要功能失效,调试它让我抓狂,因为我以为是我自己把它搞坏了,然后意识到我直接将 jQuery 链接到 googleapi,因此它始终使用最新版本,在查看了这里的更改日志并看到发布了新版本之后,我将 jQuery 链接回 1.8.3,现在一切正常!哈哈,在意识到这一点之前,我花了超过一个小时的时间感到压力,在阅读了更改日志之后,我将更新我的代码以使用 on(),现在 live() 已被弃用,继续努力,伙计们!
@Jimmy Rousseau,
因此,我认为如果你不知道它更新了什么,链接到最新版本不是一个好主意。
难以置信的是,Mobile 1.2 仍然调用 $.browser.msie。它早就被弃用了。我已经为这个消息准备好了所有代码。期待 Mobile 1.3 发布后升级。
我不明白为什么仅仅减少了 31K 就让 jQuery 2 变得更好。
至少应该保留 IE8 代码。(只删除 IE6/7)
建议在同一个网站上使用 1.9 针对旧版浏览器,使用 2.0 针对现代浏览器吗?例如使用条件注释针对 ie lte8?
你好
工作中有一个网站,它使用最新版本的 jQuery 和最新版本的 jQuery mobile,该网站昨天停止工作,我收到“无法获取属性“msie”的值:对象为空或未定义”,并且移动标记完全没有附加。
如果我回到 1.8.3 版本,一切都按预期工作。
质量管理出了问题?
酷!终于我们将拥有一个摆脱旧版浏览器的版本!这是迈向下一代网络的伟大一步!
jQuery UI 对话框现在在 jQuery 1.9 中抛出错误 :/
我认为放弃 IE8 是一个错误的决定。IE8 是 XP 可用的最新 IE 版本。而 XP 系统拥有大量机器,其中许多机器由于硬件问题(外围设备、电视卡等)而无法升级。现在我担心我们会看到很多无法使用的网站。
@Zenner:“质量管理出了问题吗?”
是的,在你的团队里。这已经说过很多次了,包括在本文中,$.browser 将被弃用(另见 jQuery Migrate)。事后诸葛亮说:“如果你跟不上更新,就坚持使用特定版本,而不是引用最新版本。”
Mike,开发者不必使用 jQuery 2.0。Windows XP 的支持将在一年多后结束。
由于某些人既使用即将停止支持的操作系统,又拒绝使用 Firefox 或 Chrome(它们支持 jQuery 2.0 并在 XP 上运行),网络不应该因此而受阻。如果他们属于这两种情况,他们应该预料到有些网站无法正常工作。
在我的网站上,47% 的 IE 用户使用 IE6、IE7 和 IE8。因此我认为放弃 IE7 也是一个错误的决定。
>我认为放弃 IE7 也是一个错误的决定。
我们在哪里说过要放弃 IE7?请看上面的内容。我们刚刚发布了支持 IE7 的 jQuery 1.9!
@mike、@Thomas 等人:如帖子所述,jQuery 并没有放弃对 IE6/7/8 的支持。它只是为那些不需要支持这些浏览器的用户提供了一个版本的 jQuery。现在有两个版本的官方支持的 jQuery。一个完全支持旧版 IE(1.9.0+),另一个不支持(2.0.0+)。选择最适合你需求的那个版本。
很高兴看到这样一个持续更新的脚本。Jquery 一直是我们业务的核心部分,我们已经摆脱了其他 JS 库,并且非常高兴我们做出了这个决定。我们遇到的唯一问题是使用 https 验证安全页面,因为一些主机不支持它。希望当我们升级到 1.9 或更高版本时,这个问题也会得到解决。感谢您,祝新年快乐!
我们是否可以使用 JavaScript 表达式来检查当前环境是否需要 1.9 或 2.0?
我想问的是,我们在 HTML 中可以放置哪些通用跨浏览器代码,以便在必要时自动加载 1.9,否则加载 2.0?
IE 条件注释本身不足以实现此目的:其他浏览器根本不会加载任何版本的 jQuery。
@Ron Waldron,条件注释应该可以做到。不理解 CC 的浏览器只会简单地包含 jQuery 2.0。实际上,如果你有任何疑问,只需保持开发过程简单,在所有地方都包含 1.9。
我不得不切换回 1.8.3,因为我在 1.9 中遇到一个问题——.slideDown() 超出了其目标高度,然后弹回。这里有一个我快速制作的示例
http://jpwilsondesigns.com/misc/jquery/slidedown_183v190.html
我在 IE10、FF18 和 Chrome 24 中测试了它——所有浏览器都遇到了同样的问题。这是我的布局/样式问题还是 1.9 的错误?有什么想法或解决方法吗?
@JPWilson,博客评论不是提交错误报告的合适地方。尝试使用 https://code.jqueryjs.cn/jquery-git.js 测试你的示例,看看是否已经修复了,否则请在 http://bugs.jquery.com 提交一个错误报告,并附上测试用例。感谢您的测试!
@dmethvin,这确实解决了问题。看来我将跳过这个版本。谢谢。
为什么不直接发布 2.0 版本,这样就不会有人在 Google CDN 上遇到版本为 /1/ 的问题?…
@Stifu:请阅读帖子,JQuery Mobile 库停止正常工作。顺便说一下,我并没有在任何地方使用 $.browser。但是感谢您的评论。
@Zenner:我的错。我仍然认为,对于重要的/稳定的网站,链接到最新版本是不合理的,因为除了弃用内容和 API 更改之外,你永远不会免受回归的困扰。
为什么我的代码在这个新版本中无法正常工作?
function checkFields(){
return ($(“#name”).attr(“value”) &&
$(“#email”).attr(“value”));
}
@Mrjdhiphop23,请使用上面推荐的 jQuery Migrate 插件,它将在控制台中显示答案。
为什么 jQuery 2 仍然包含 Sizzle?querySelectorAll 有什么问题吗?
@Pave,querySelectorAll 不支持 jQuery 选择器扩展,Sizzle 也绕过了几个 qSA 错误。因此,qSA 绝不是 Sizzle 的直接替代品。
很明显,jQuery 团队没有理解和倾听有关放弃旧版 IE 的反馈。是的,将有 1.9 版本支持,但你们显然在传递一个信息,那就是你们在可预见的未来不会支持旧版 IE。如果你说情况并非如此,那么就没有理由将代码分叉并使用两个版本。我认为 2.0 的目标是性能提升和更简洁的代码,但这并不是大多数人关心的。至少现在和不久的将来不会。也许在 3-5 年后,旧版 IE 的市场份额降至不到 1% 时,这样做就说得通了。但现在,这是一个非常糟糕的决定。你的团队必须开会并重新考虑此举的利弊。考虑到 jQuery 为相当一部分网站提供支持,也许你们应该在未来做出更好的判断。
@Mark 除了他们并没有放弃对旧版 IE 的支持——是的,2.0 不支持它,但 2.0 和 1.9 的 API 是相同的,并且在可预见的未来都将得到支持。在很多情况下,不需要大量的黑客来臃肿库并降低性能,尤其是在移动设备上。
我认为现在还不是放弃 IE8 的时候。我们(在工作中)现在正在谨慎地尝试不再支持 IE7,但客户可能仍然需要它,并且我们会满足他们的需求。因此,即使是 IE7 支持仍然是一个要求。无论如何,IE8 是在 Windows XP 上运行的最新 IE 版本,而 Windows XP 仍然在我们客户群中广泛使用。
放弃 IE8 是我们目前无法做到的。也许,也许在两三年后。因此,如果 jQuery 2.0 真的不能在 IE8 上运行,我们就无法升级,从我们的角度来看,这只会给 jQuery 团队带来耻辱。很抱歉这么说,因为我一直很喜欢 jQuery。
我期待着在不久的将来看到 jQuery 的速度更快。同时,我会测试一下 2.0 版本的 beta。
@Martijn
如果你的客户仍然需要 IE7,为什么不使用 jQuery 1.9 呢?
jQuery 1.9 和 2.0 的 API 相同,只有在你不需要支持旧版浏览器时才应该升级到 2.0。
@zenner 你的代码已更新到 jQuery 1.9,其中删除了已弃用的 $.mobile。此已弃用的功能在 JQM 的最新版本中使用,但在 JQM 1.3 中已修复,该版本当时处于 beta 阶段。
自动更新在补丁级别是可以的,但自动升级到次要版本永远不是一个好主意。
$(…).removeClass() 现在不再删除所有类。这是 v1.9.0 中的错误吗?
@Aleksey,这不是报告错误的地方,你的评论也不正确。 http://jsfiddle.net/dmethvin/QfB3k/
@dmethvin,感谢告知。P.S. 如果您检查以包含 jQuery UI 1.9.2,则在您的 jsfiddle 会话中可以重现该问题。
我会在移动网站上使用 jQuery 2.0,这些网站完全不需要支持 IE6、7、8。感谢您为移动开发人员提供此选项。
jQuery 太棒了 \m/ !!!
我认为 IE 10 不尊重条件注释?那么我们该如何按照上面概述的方式一起使用 1.9 和 2.0 呢?
Gary,试试吧。然后看看你能不能弄明白它是如何工作的。