jQuery 1.5 发布

发布于 作者

如期而至,jQuery 1.5 已经准备就绪!

这次发布历时已久,是一项真正的团队努力。请借此机会感谢 jQuery 团队jQuery bug triage 团队 的成员,感谢他们帮助将这次发布推向市场。

下载

像往常一样,我们提供两个版本的 jQuery,一个压缩版和一个未压缩版(用于调试或阅读)。

您可以直接将以上 URL 包含到您的网站中,从而获得快速加载 jQuery 的全部性能优势。

此外,您还可以直接从 Microsoft 和 Google 的 CDN 加载 URL

Microsoft CDN: http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.5.min.js

Google CDN: https://ajax.googleapis.ac.cn/ajax/libs/jquery/1.5.0/jquery.min.js

关于本次发布

本次发布修复了 83 个已修复的 bug,总共关闭了 460 个 issue

测试套件(现在有 4437 个测试)在 jQuery 支持的所有浏览器以及更多浏览器中都通过了测试。我们验证了该套件通过了以下所有浏览器

  • Safari 5.0.3 / 4.0.5 / 3.2.3 / 3.1.2
  • Opera 11.01 / 11 / 10.63 / 10.54 / 10.10 / 9.64
  • IE 6 / 7 / 8
  • Firefox 4.0b9 / 3.6.13 / 3.5.11 / 3.0.19 / 2.0.0.20
  • Chrome 8.0.552.215 / 8.0.552.237 / 9.0.597.67 Beta / 10.0.642.2 Dev

此外,发布版本的全部 API 文档可以在 API 网站上找到:jQuery 1.5 API 文档

我们的未来发布计划可以在我们的 路线图 上找到。目前我们计划更频繁地发布主要的 jQuery 版本(可能每年几次,而不是每年一次)。

所以,不多说,jQuery 1.5 发生了哪些变化?

Ajax 重写

本次发布中最大的变化是 jQuery 中 Ajax 模块的完整重写。这次重写有助于修复旧 Ajax 系统中存在的许多漏洞,并提供更高水平的 API 一致性。

也许最大的变化是,对 jQuery.ajax(或 jQuery.get、jQuery.post 等)的调用现在返回一个 jqXHR 对象,该对象在跨平台中为 XMLHttpRequest 对象提供一致性(并允许您执行以前不可能的任务,例如中止 JSONP 请求)。

有关新的 jqXHR 对象的更多详细信息,请参阅 jQuery.ajax() 文档

除了更一致的 API 之外,Ajax 系统现在也更加可扩展,允许您附加各种数据处理程序、过滤器和传输器。这些更改应该会开启全新的 Ajax 插件领域,这些插件可以利用这种可扩展性。有关更多信息,请参阅 扩展 Ajax 文档。团队正在积极征求有关 Ajax 可扩展性 API 的反馈,如果您有任何反馈,请随时发送到 Developing jQuery Forum

Deferred 对象

随着 Ajax 模块的重写,还引入了一个新功能,该功能也公开可用:Deferred 对象。此 API 允许您使用尚未立即可用的返回值(例如异步 Ajax 请求的返回值)来工作。此外,它还使您能够附加多个事件处理程序(以前在 Ajax API 中不可能实现)。

例如,以下内容现在可以使用 jQuery 的内部 Ajax API 实现

// Assign handlers immediately after making the request,
// and remember the jqxhr object for this request
var jqxhr = $.ajax({ url: "example.php" })
    .success(function() { alert("success"); })
    .error(function() { alert("error"); })
    .complete(function() { alert("complete"); });

// perform other work here ...

// Set another completion function for the request above
jqxhr.complete(function(){ alert("second complete"); });

此外,您可以使用公开的 jQuery.Deferred 创建自己的 deferred 对象。有关此 API 的更多信息,请参阅 Deferred 对象 文档。

Eric Hynds 写了一篇关于 在 jQuery 1.5 中使用 Deferreds 的优秀教程。

jQuery.sub()

jQuery 现在公开了一种新的方法,您可以使用它来创建和修改 jQuery 的克隆,同时仍然利用完整的 jQuery API。例如,您可以使用它来覆盖本机 jQuery 方法,而不会影响其他用户将与之交互的方法,甚至为您的插件创建封装的 API,以避免命名空间冲突。

这是一个将方法添加到 jQuery 子类,使其不公开的示例

  (function(){
    var sub$ = jQuery.sub();

    sub$.fn.myCustomMethod = function(){
      return 'just for me';
    };

    sub$(document).ready(function() {
      sub$('body').myCustomMethod() // 'just for me'
    });
  })();

  typeof jQuery('body').myCustomMethod // undefined

有关 jQuery.sub() 的更多信息,请参阅 API 文档。

请注意,如果您希望将其用于插件开发,则应首先认真考虑使用 jQuery UI 部件工厂,它管理状态和插件子方法。 使用 jQuery UI 部件工厂构建插件的一些示例

相邻遍历性能

在此版本中,我们还能够提高一些常用遍历方法的性能:.children()、.prev() 和 .next()。我们看到的速度提升非常显著(根据浏览器,可能快很多倍)。

.children() Performance in jQuery 1.5

.prev() Performance in jQuery 1.5

.next() Performance in jQuery 1.5

性能测试用例和原始数字

构建系统

最后,我们对 jQuery 的内部构建系统进行了一些更改。我们致力于将所有构建过程标准化为出色的服务器端 JavaScript 环境:NodeJS。我们特别感谢这一点,因为我们能够减少对遗留 Java/Rhino 系统的依赖,并更加专注于新兴的 JavaScript 环境。

此外,随着这种转变,我们转而使用 UglifyJS 而不是 Google Closure Compiler。我们使用它后看到了一些不错的的文件大小改进,因此我们对此转变感到非常满意。

谢谢!

与往常一样,我们感谢所有帮助这次发布的人——没有您的贡献,这次发布是不可能实现的。如果您有任何问题或发现任何错误,请将您的 issue 提交到 jQuery bug tracker

API 文档变更

发布于 作者

examples of comments on api.jquery.com 当我们去年一月向 API 文档添加评论时,其想法是为社区成员提供一个地方,以便通过他们自己的提示或实际示例来扩充文档。虽然该系统在最初推出时效果很好,但它已变得越来越难以管理它所吸引的大量垃圾邮件。我们还发现许多人试图将其用作支持系统,而它并非为此目的而设计的。因此,我们计划在本周晚些时候关闭 API 网站上的评论,转而采用更直接的反馈选项

  • 如果您需要帮助调试代码或理解某个工作原理,或者如果您有兴趣帮助他人,请前往 jQuery 论坛 或访问 irc.freenode.net 上的 #jquery。
  • 如果您发现错误或对增强功能有想法,请遵循我们的 错误报告指南 并直接提交您的报告至我们的 错误追踪器
  • 如果您发现文档中存在错误或遗漏,并希望帮助我们改进它,我们将为您提供一个简单的联系表格来填写。

一旦禁用评论,jQuery API 子团队的成员将仔细检查旧评论,以获取我们可以(在征得评论者同意的情况下)整合到正式文档中的任何信息。

观察和经验教训

即使我们关闭评论系统,在网站上使用它过去一年也是一次宝贵的经验。 以下是我们在此过程中注意到的一些观察和经验教训

  • 当错误报告、功能请求和求助电话留在评论中,而不是在错误追踪器和论坛中时,它们没有得到应有的关注。
  • 当好心人回复了错误渠道中的求助请求时,他们无意中导致了社区的碎片化。
  • 另一方面,当人们在适当的渠道中发起和回应话题时,成功解决的可能性要大得多。
  • 关于编写适当评论的说明经常被忽视,无论其大小、位置或措辞如何。
  • 随着错误修复和增强功能的应用,及时且准确的评论的价值和准确性会随着时间的推移而降低。
  • 知道何时以及如何“修剪”评论是一个特别具有挑战性的问题。 例如,在修改条目中的措辞以解决评论线程后,我们认为删除该线程是合适的。 然而,我们也遗憾地没有能够适当地感谢那些在不增加评论噪音的情况下提供帮助的人。
  • 如果插件作者在评论中宣传他们的项目,是垃圾邮件吗? 我们对此问题没有好的答案,以及许多其他类似的问题,但这并没有阻止我们花费大量时间来研究处理这些情况的正确方法™。

感谢 jQuery API 子团队

最后,我想借此机会感谢那些志愿贡献宝贵的时间和资源来维护和改进 API 文档的人们。 以下是最近成立的 jQuery API 子团队的成员

  • Adam Sontag
  • Addy Osmani
  • Alex Sexton
  • Dan Heberden
  • Dave Methvin
  • Eddie Monge
  • Jonathan Chaffer
  • Karl Swedberg
  • Paul Irish
  • Richard Worth
  • Rick Waldron
  • Scott González
  • Sean Koole
  • Todd Parker

此外,感谢 jQuery 社区中的所有成员提供的建议、批评和鼓励。

jQuery 1.5 RC 1 发布

发布于 作者

我们正在接近 jQuery 1.5 的最终发布——我们很高兴地宣布发布第一个候选版本! 除非出现重大错误,否则这将是我们最终发布 jQuery 1.5 的代码(将于 1 月 31 日发布)。

最终的发布说明和文档将与最终的 1.5 版本一起发布。

jQuery 1.5 Release Candidate 1

您可以从 jQuery CDN 获取代码

您可以帮助我们,将该代码放入您现有的应用程序中,并告诉我们是否有任何不再起作用的内容。请 提交 bug 并确保提及您正在使用 jQuery 1.5 RC 1 进行测试。

我们希望鼓励社区中的每个人尝试 参与 jQuery 核心的贡献。我们已经建立了一个 完整页面,专门介绍如何更多地参与团队工作。团队随时准备帮助您帮助我们!

jQuery 1.5 Beta 1 发布

发布于 作者

祝 jQuery 5 周岁生日! jQuery 于 2006 年 1 月 14 日发布,今天标志着它开发 5 周年!

为了庆祝这个场合,我们发布了 jQuery 1.5 的第一个 beta 版本!我们 计划 在 10 天内发布最终的候选版本,并在月底发布最终版本。

我们还想宣布三位新成员加入 jQuery 核心开发团队:Julian Aubourg、Colin Snover 和 Anton Matzneller。他们三人都为 1.5 版本做出了重大贡献——提供了重要的代码贡献、bug 修复和分类。请借此机会欢迎他们加入!

此外,我们还想借此机会感谢所有帮助发布这个 beta 版本的 jQuery 社区成员——尤其是所有 bug triage 团队 的成员。

我们希望鼓励社区中的每个人尝试 参与 jQuery 核心的贡献。我们已经建立了一个 完整页面,专门介绍如何更多地参与团队工作。团队随时准备帮助您帮助我们!

所以,不多说——jQuery 1.5 Beta 1!

jQuery 1.5 Beta 1

您可以从 jQuery CDN 获取代码

您可以帮助我们,将该代码放入您现有的应用程序中,并告诉我们是否有任何不再起作用的内容。请 提交 bug 并确保提及您正在使用 jQuery 1.5 Beta 1 进行测试。

jQuery 1.5 Beta 1 变更日志

这是一个简洁的变更日志——完整的发布说明将与最终的 1.5 版本一起发布。

  • Julian Aubourg 重写了 Ajax 模块。这是本次发布中最重要的更改,为 $.ajax 带来了许多性能、稳定性和功能改进。有关更多信息,请参阅 此处 #7195
  • 现在支持 jQuery 中的子类化 #7901
  • 在使用 noConflict() 时消除了扩展冲突的可能性(V8 很快!)。扩展字符串现在使用随机数 + jQuery 版本来区分 jQuery 的实例,而不是毫秒时钟时间。 #6842
  • 删除了 $.get 和 $.post 中的重复代码。 #7847
  • 当原生浏览器事件在 DOM 中冒泡时,请确保 jQuery 的 Event 对象正确反映 isDefaultPrevented 的值。 #7793
  • 不再在 buildFragment 中缓存非 HTML 字符串,以避免与 Object 方法(如 toString)的名称发生可能的冲突。测试表明这也可以提供适度的性能提升。 #6779
  • 更新了 cloneCopyEvent,使其在克隆元素时不会创建多余的数据对象。 暴露了一个新方法,$.hasData,用于确定对象是否具有任何数据。 #7165
  • 在复制事件时,使用 for 循环而不是 for/in 循环,以便代码可以与增强的 Array.prototype 配合使用。 #7809, #7817
  • 修复了 fadeIn 与内联元素配合使用时无法正常工作的问题。 #7397
  • 重写了 IE 的克隆函数,使其在所有已知情况下都能正常工作。 #4386, #5566, #6997
  • 修复了 IE 在对纯 JavaScript 对象分派 ‘submit’ 事件时崩溃的问题。 #6398
  • 修复了 1.4 版本中的一个回归问题,该问题导致脚本传输的缓存控制设置不正确。 #7578
  • 改进了负索引的 get() 性能。 #5476
  • hasClass、removeClass 在 IE 中不起作用,如果属性包含回车符 (\r) 字符。 #7673
  • 修复了 1.4.4 版本中的一个回归问题,即在非 DOM 元素上调用 $.fn.data 而不带参数会导致错误。 #7524
  • 修复了 IE 中由 $.ajax 的自定义 abort 函数引起的内存泄漏。 #6242
  • 防止活动事件在 IE 中被禁用元素触发。 #6911
  • 修复了 1.4.3 版本中的一个回归问题,该问题导致将 Location 对象发送到 $.ajax 停止工作。 #7531
  • 修复了一个问题,某些遍历方法执行了不必要的唯一性检查。 #7964
  • 现在支持指定回调函数来处理特定的状态码 #4964
  • 修复了一个问题,其中 ?? 不受支持作为 JSONP 请求回调名称的上下文无关占位符。 #4897
  • 从 dataFilter 返回的数据没有传递给 ajax complete() 回调函数。 现在我们使用 jXHR 的 promise 接口来获取实际的响应。 #4825
  • 现在我们确保 buildFragment 在所有浏览器中都能正确克隆元素。 #6655#3879
  • 修复了在 IE8 中绑定自定义事件时引起的内存泄漏 #7054
  • 表单数据中的行现在在提交表单时以 CRLF 分隔(如 W3C 建议)。 #6876
  • Ajax 请求现在在卸载时中止,这样事件仅在 xhr 传输使用时才会被绑定。 #5280
  • 现在支持即使在数据序列化期间转义了,也能检测到 =?。 #5812
  • 如果用户使用 jsonpCallback 设置,现在会自动将 dataType 设置为 ‘jsonp’。 #5803
  • crossDomain 选项现在强制 ajax 将请求视为跨域请求,即使它不是。 当服务器发出重定向到跨域 URL 时,这很有用。 #5955
  • $.ajax(this) 允许重试,而不会出现 jQuery 1.4.3 中发现的递归错误。 #7461
  • 移除了对 Opera 9 早期版本的补丁,该补丁使得动画值小于 -10000 变得不可能。 #7193
  • ResponseText 现在正确地传递给错误回调函数。 #7868
  • Scripts onload 处理程序将事件作为第一个参数传递,因此 statusText 现在作为 aborts 的第二个参数传递。 #7865
  • 对于 xhr,将 contentType 设置为 false 现在将阻止发送 Content-Type 标头。 #7465
  • 在序列化文本时,现在将所有换行符编码为 CRLF 对,符合 application/x-www-form-urlencoded 规范。 #6876
  • 修复了 IE6 中的一个错误,该错误导致某些事件处理程序导致跨页面内存泄漏。 #7762
  • 跨域检测的测试现在包括检查协议、主机名和端口。 #7465
  • 修复了一个问题,其中包含句点 ID 会导致 find() 在不返回结果的情况下中断。 #7533
  • next/adjacent 选择器不再在没有 ‘prev’ 元素的情况下无法工作的问题已得到纠正。 #7452
  • 修复了 1.4.3 中的回归问题,该问题阻止了在非 DOM 元素节点上使用 attr(),其中 nodeType 为 1 #7452, #7500,
  • 修复了一个错误,其中包含 jQuery 1.3.2 会导致 IE8 屏幕右侧出现边框。 #5575
  • 我们修复了一个问题,即向 Array.prototype 添加额外的函数并使用 jQuery.clone(true) 克隆元素会导致无效的事件绑定。 #6355
  • 修复了 Internet Explorer 中 nth-child 处理空格不正确的问题。 #7558
  • 我们纠正了一个错误,在使用活动事件时 mouseenter/leave 表现得像 mouseover/out。 #5821
  • 修复了 1.4.3 中的回归问题,该问题导致 eq() 选择器不再与 previous 和 adjacent 选择器一起工作 #7906
  • 更新了有关 event.currentTarget 的文档,以解决与 jQuery.proxy 相关的任何混淆。 #7628
  • 修复了一个问题,其中 xhr.setRequestHeader(‘Accept’,…) 追加了该值而不是替换它。 #6230
  • 修复了一个 IE 问题,其中以 ‘+xml’ 结尾的内容类型(例如 rss+xml)的 ajax 方法失败。 #4958
  • 对 ajax 的更新现在允许中止任何请求。 #3442
  • 修复了 FireFox 3.6.11 中的 .slideUp() 问题,该问题先前隐藏了 frameset 边框和 legend,但留下了任何其他元素未覆盖的内容。 #7308
  • 现在支持跨浏览器 XML 解析。 #6693
  • 修复了一个错误,在使用 dataType:’json’ 在 .ajax() 方法中时,数据对象在 IE6 和 7 中未定义。 #6106
  • 纠正了一个问题,JSONP 调用在调用完成时没有删除脚本标签。 #7418
  • 更新了文档,以反映在不指定持续时间的情况下使用 delay() 和 show() 时支持的行为。 #7543