jQuery 2.0 Beta 2 发布
jQuery 2.0 的下一个 beta 版已发布!此 beta 版包含一些根据我们从慷慨测试第一个 beta 版的用户那里收到的反馈而进行的更改和调整。我们确实需要您也测试此版本,并告知我们还有哪些需要完成的工作。我们相信此版本非常稳定,可以供您尝试;不要等到最终发布后再发现您的代码无法运行。
请记住,jQuery 2.0 *不会在* IE 6、7 或 8 上运行;我们将把这项任务留给 jQuery 1.9。我们完全预计大多数互联网网站可能会继续使用 jQuery 1.x 很长一段时间,只要旧版本的 IE 仍然占很大一部分网络用户。因此,jQuery 团队也将继续支持 jQuery 1.x 和 2.x 两个分支。不要觉得在您的网站上使用 1.9 会错过什么或落后,因为 1.9 和 2.0 的 API 是一样的。
如果您想在仍然需要支持 IE 6、7 和 8 的网站上尝试 jQuery 2.0,您可以使用条件注释。除了旧版本的 IE 之外的所有浏览器都将获取第二个脚本并忽略第一个脚本
<!--[if lt IE 9]> <script src="jquery-1.9.1.js"></script> <![endif]--> <!--[if gte IE 9]><!--> <script src="jquery-2.0.0b2.js"></script> <!--<![endif]-->
还有许多其他环境非常适合使用 jQuery 2.0。以下是一些建议
- Google Chrome 插件
- Mozilla XUL 应用程序和 Firefox 扩展
- Firefox OS 应用程序
- Chrome OS 应用程序
- Windows 8 应用商店(“现代/Metro UI”)应用程序
- BlackBerry 10 WebWorks 应用程序
- PhoneGap/Cordova 应用程序
- Apple UIWebView 类
- Microsoft WebBrowser 控件
- Cheerio 或 jsdom 与 node.js
- 内联网应用程序
在 node.js 方面,jQuery 团队现在拥有 npm 中的“jquery”和“jQuery”名称,并将很快在 npm 中发布 2.0 版本。
您可以从 jQuery CDN 获取此最新 beta 版
https://code.jqueryjs.cn/jquery-2.0.0b2.js
要使用 jQuery 2.0 运行 1.9 之前的代码,您还可以使用 jQuery Migrate 插件 来恢复这些旧版本中的已弃用功能和/或诊断兼容性问题。我们强烈建议您对旧代码使用 Migrate,它将节省您调试时的大量时间和麻烦。
新增功能
大量错误修复:所有来自 jQuery 1.9.1 和 1.9.2pre 的相关修复都已合并到 jQuery 2.0 beta 2 中。我们很遗憾不得不回退一些不受旧版 WebKit(如 Android 2.3)支持的优化,但其中大多数对大小影响并不大。尽管如此,我们还是计划尽快将它们带回来!为了帮助我们,每当您看到一部旧的 Android 手机时,您都可以“意外地”用锤子敲击它。
新的 .data() 实现:此新代码由 Rick Waldron 完全重写。它更小、更简单,而且比旧代码更容易维护。
自定义构建中的模块化程度提高:如果您愿意使用 .on("mouseover"...)
而不是 .mouseover(...)
,您现在可以排除所有冗余的事件简写,例如 .mouseover(...)
。
最小的选择器引擎:Richard Gibson 创建了一个围绕浏览器原生 querySelectorAll
和 matchesSelector
API 的小型包装器,可以用作完整 Sizzle 选择器引擎的替代品。但是请注意,支持的选择器和语义存在 重大差异。例如,此最小引擎不支持 jQuery 选择器扩展,例如 :radio
或 :first
。
自定义构建
我们希望您尝试基于 grunt 的自定义构建系统。 自述文件 详细介绍了如何创建自定义构建。从 beta 2 开始,您可以用一个简单的选择器引擎替换 Sizzle,并排除 css、事件别名、动画、偏移量和已弃用功能(例如 .andSelf()
,该功能尚未删除)。此外,您还可以排除脚本、JSONP 或 XMLHTTPRequest 传输的子集。没错,拒绝我们 jQuery 现实中的任何模块,并用您自己的模块替换它。
以下是一个使用模块化构建可以节省多少内容的示例。假设您不需要 css、偏移量、尺寸或已弃用模块,并且计划完全通过 CSS 过渡和类来完成动画。此外,您只通过 $.ajax()
使用 JSONP。您将使用 .on()
来管理事件,并将保持选择器简单,以便最小选择器引擎可以完成工作。执行此操作的构建命令是
grunt custom:-sizzle,-css,-event-alias,-effects,-offset,-dimensions,-deprecated,-ajax/xhr
来自该自定义构建的结果文件在通过 gzip 传输时只有 17,530 字节,比完整 2.0 构建的 29,387 字节 gzip 小 40%。相比之下,当前 1.9 分支的 gzip 大小为 32,770 字节。
我们仍然认为,大多数 jQuery 用户最适合使用最简单的选项:使用 jQuery 的完整版本,从 CDN 或您的本地服务器提供服务。大多数 jQuery 插件的编写方式不允许您使用 jQuery 核心功能的子集——毕竟,它们从未想过会缺少任何功能!但对于值得花时间确定这些依赖关系的情况,jQuery 当前的模块化水平提供了极佳的灵活性。
衷心感谢以下为本版本贡献修复的人员:Adam Coulombe、Andrew Plummer、Danil Somsikov、Dmitry Gusev、Isaac Schlueter、James Burke、Jean Boussier、Julian Aubourg、Karl Sieburg、Mark Raddatz、Mike Sherov、Nguyen Phuc Lam、Oleg Gaidarenko、Pascal Borelli、Richard Gibson、Rick Waldron、Ryunosuke Sato、Timmy Willison 和 Timo Tijhof。特别感谢 Scott González 的极简主义作品,标题为“空格”。
变更日志
Ajax
- #13388:Ajax 请求未返回 responseXML
- #13276:在 IE 9/10 中,$.parseXML() 返回 document 对象而不是 XMLDOMDocument
- #13292:在 204 的情况下,使用 1.9.0 的 $.ajax 不再调用成功函数
- #13306:添加到序列化表单的文件输入会导致行为发生变化,并且只部分遵循规范
构建
- #12656:将事件简写设为可排除模块
- #13316:使用 TestSwarm 检查 jquery.min.js
- #13335:'use strict';在 FF 中打破 asp.net ajax postacks
核心
Css
延迟
效果
事件
操作
- #13232:在 2.0beta1 中,对 tbody 选择器使用 html() 函数会导致插入新的 tbody
- #13233:在 jquery 1.9 中,对分离的节点进行迭代和操作时,行为异常
- #13282:QtWebKit——TypeError:' [object Object]' 不是 'Function.prototype.apply' 的有效参数(正在评估 'elem.nodeType')
选择器
- #13434:创建 querySelectorAll/matchesSelector 选择器选项
- #13331:jQuery.fn.add 在 Chrome 和 Safari 中返回错误的顺序
- #13420:当使用 .parent() 和 .closest() 时,jQuery 1.9.1 无法通过类名筛选 SVG 父节点
- #13499:当搜索的 ID 不存在但 NAME 存在时,后代选择器失败(仅限 IE7)
- #13505:jquery#add:在较大的列表中,似乎会使集合中的项乱序
支持
遍历
- #13265:在 IE10 中,parent 方法对文本节点失败
- #13332:.closest(' * ') 即使对于非元素节点也会产生输入
- #13349:自 1.9.0 以来,find 函数速度变慢,尤其是在 Chrome 中
Scott González 是我的新英雄!
这是个好消息!我特别喜欢自定义构建。模块化 FTW
谢谢你们,我们喜欢 jQuery!
这是个好消息,尤其是对于移动开发者来说。有了此版本,解析时间有望减半。
我希望 JQM 团队能充分利用此新的自定义构建系统,并使其与他们自己的自定义构建系统一起使用。这样我们就可以生成一个更有效率的代码块。
是我理解错了吗,还是上面的条件语句意味着 IE9 根本没有获取 jQuery?
_jquery 2.x 不在任何<=IE8 的环境中运行,太棒了!
@Ben Squire: gte 代表“大于或等于”,所以 IE9 通过这个条件语句可以获取 jQuery 2.0
你们太棒了!
你还是不能比较 Zepto.js 和 jQuery 2 的文件大小,压缩后 gzip 的文件大小分别为 10.9?KB 和 29.1?KB。jQuery 的体积几乎是 Zepto.js 的 3 倍。
@Binyamin: 你觉得这其中的区别是什么?如果 Zepto 解决了 jQuery 社区多年来修复的问题,它的大小也会类似。这种文件大小应该不是问题,稳定性才是最重要的。
如果 Zepto 继续存在,它的大小也会增长到类似的大小。不过我认为它不会,因为人们已经意识到了这一点。给自己一个机会,选择稳定可靠的框架吧。
jquery 1.9 和 2.0 之间的区别不到 3.4 KB(gzip 压缩后)。对于如此小的区别,值得维护两个版本吗?感谢你们的辛勤工作 :)
@MAddy: 它们还没有完成,但无论如何,不仅仅是文件大小,还包括性能和可维护性。
function jQuery_2(){
$(‘IE8’).parents().kill() ;
}
没错,没错。
我的天哪,我的天哪,我的天哪。太棒了,再次感谢你们。
我正在阅读我的电子邮件,心里不停地对自己说“我没有时间做这个”,然后按下删除键。我对自己说:“唯一能让我想做的事情,就是 jQuery 发布 2.0 版本……”
请修复 JQUERY 博客的 RSS 订阅。
最近我更喜欢 microjs.com 的东西(以及 TJ Holowaychuk 的组件),因为它们体积小,而且模块化,不过 jQuery 是唯一能够在进行客户端工作时让你放心地跨浏览器运行的框架,而且你只需要交付就行了。所以这个 2.0 版本(以及其中的所有新功能)看起来在正确的时间出现了正确的东西。
酷!jQuery 真棒!
谢谢你们,我们喜欢 jQuery!
我们喜欢 jquery();
那些安装了 IE6/7/8 的电脑太可怜了。
终于有了 jquery 2. 这是一个漫长的旅程,我通过 JQ 学习了 JavaScript。感谢你们的辛勤工作!
“请记住,jQuery 2.0 无法在 IE 6、7 或 8 上运行。”
也要记住,这是一个非常糟糕的决定。现在还不是放弃 IE7 和 IE8 的时候。放弃 IE6 可以,但 IE7 和 IE8 仍在使用,客户要求网站(至少)能在这些浏览器上正常运行。网页开发者可能决定不在 IE8 上让他们的网站正常运行,但 jQuery 不应该立即为所有人做出这个决定。
因此,放弃对在 Windows XP 上运行的最新 IE(即 IE8)的支持是一个可怕的决定,iyam。这将阻止许多(如果不是所有)jQuery 的商业用户升级到 2.x 版本。
抱歉,关于 jQuery 2.0,我只能(而且会继续)说这些。
放弃 IE6,但支持 IE7 和 IE8,这样我才能再次尊重你们。
@Martijn,请重新阅读我们关于 jQuery 1.9 和 2.0 的说法,直到你明白我们并没有“放弃”任何东西。
感谢大家..
@dmethvin
是的,我读了,使用两个不同的 jQuery 版本。欢迎来到地狱。我绝不会那样做。
哦,我的天哪!中国有很多使用 IE9 版本的人。
@martijn
“不要因为在你的网站上使用 1.9 版本而感到自己错过了什么或者落后了,因为 1.9 和 2.0 的 API 是相同的。”
好了,他们没有强迫你使用两个版本,IE6,7,8 在使用完整的 jQuery 功能版本的情况下是可以支持的。jQuery 2.0 仅适用于那些不依赖 IE 支持的用户,但更高的文件大小 / 复杂度 / 速度可能是一个问题(例如移动应用程序中的 WebView)。
另外请记住,XP 的完全停止支持时间大约还剩一年,而 Server 2003 的停止支持时间也仅仅只比它晚一年。
我记得 windows xp 在 2014 年 4 月停止支持,那可是很长一段时间了。
IE 10 会忽略条件注释,因此在 IE10 上,开头使用的代码片段与实际无关。
http://blogs.msdn.com/b/ie/archive/2011/07/06/html5-parsing-in-ie10.aspx
@ Robert McLaws
如果你尝试一下,它确实按发布的方式工作。仔细检查 gte IE9 部分中的额外注释标签。
我非常同意 @martjin 的观点。我们刚刚摆脱了文档类型,现在我们需要为 javascript 和 jquery 制定标准化。WordPress 将于 29 日更新,有没有人与他们协商过他们将在框架中支持哪些库?这种问题会一直持续下去,因为无数的集成会带来这种问题。我不想携带两个版本,或者必须记住哪个版本需要做什么,你永远无法摆脱 1.9.x,而这会导致你们自己失败。
Robert 的示例证明了这一点——虽然条件注释不适用于 IE10+,但这并不是最明智的做法。如果你安装了 IE10,我可以想象测试工作脚本和 lte/gte 注释会非常困难。
太可惜了,“grunt”根本无法正常工作。
path.js:313
throw new TypeError('Arguments to path.resolve must be strings');
..我已经看到这个好几周了。真是一段有趣的时光。
我在我的 phonegap 应用程序中使用 2.0,并希望在 5 月初上线。
你们对此有什么看法?我将在我的构建中打包 2.0,而不是引用 CDN。
另外,2.0 的发布目标是什么?
@ernest,我阅读了回复,但我不确定你想说什么。如果你觉得决定或理解太难,你可以安全地对所有浏览器使用 1.9。我们没有强迫任何人使用 2.0 或条件注释。