jQuery 1.5 发布

发布于 作者

jQuery 1.5 正式发布!

这个版本经过了漫长的开发过程,并且是整个团队共同努力的结果。请借此机会感谢 jQuery 团队jQuery 错误分类团队 的成员,感谢他们帮助我们发布这个版本。

下载

和往常一样,我们提供两个版本的 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 个错误,总共关闭了 460 个工单

测试套件(现在有 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 论坛

延迟对象

随着 Ajax 模块的重写,一个新功能也被引入,并公开可用:延迟对象。这个 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 创建自己的延迟对象。有关此 API 的更多信息,请参阅 延迟对象 文档。

Eric Hynds 写了一篇关于 在 jQuery 1.5 中使用延迟对象 的好教程。

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 环境上。

此外,随着这次切换,我们也从 Google Closure Compiler 转而使用 UglifyJS。我们已经看到了使用它带来的文件大小改进,因此我们对这次切换感到非常满意。

感谢!

与往常一样,我们要感谢所有为这个版本做出贡献的人——没有你们的贡献,这个版本是不可能完成的。如果您有任何问题或发现任何错误,请将您的问题提交到 jQuery 错误跟踪器

API 文档更改

发布于 作者

api.jquery.com 上评论的示例 去年 1 月,我们在 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 候选版本 1

您可以在 jQuery CDN 获取代码

您可以通过将代码放入您的现有应用程序中来帮助我们,并告知我们是否有任何功能不再正常工作。请 提交错误,并确保您提到您正在针对 jQuery 1.5 RC 1 进行测试。

我们鼓励社区中的每一个人尝试 参与 并回馈 jQuery 核心。我们专门建立了一个 完整页面 来介绍如何与团队合作。团队就在这里,随时准备帮助您帮助我们!

jQuery 1.5 测试版 1 发布

发布于 作者

祝 jQuery 五岁生日快乐!jQuery 于 2006 年 1 月 14 日发布,今天是它发展的第五年!

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

我们还宣布了 jQuery 核心开发团队的三位新成员:Julian Aubourg、Colin Snover 和 Anton Matzneller。他们三人都是 1.5 版本的主要贡献者,提供了重要的代码贡献、错误修复和问题分类。请借此机会欢迎他们加入团队!

此外,我们也要借此机会感谢所有帮助我们发布这个测试版的 jQuery 社区成员,尤其是 错误分类团队 的所有成员。

我们鼓励社区中的每一个人尝试 参与 并回馈 jQuery 核心。我们专门建立了一个 完整页面 来介绍如何与团队合作。团队就在这里,随时准备帮助您帮助我们!

所以,话不多说,jQuery 1.5 测试版 1 发布!

jQuery 1.5 测试版 1

您可以在 jQuery CDN 获取代码

您可以通过将代码放入您的现有应用程序中来帮助我们,并告知我们是否有任何功能不再正常工作。请 提交错误,并确保您提到您正在针对 jQuery 1.5 测试版 1 进行测试。

jQuery 1.5 测试版 1 变更日志

这是一个简短的变更日志,完整的发布说明将在最终的 1.5 版本中发布。

  • 由 Julian Aubourg 重写 Ajax 模块。这是此版本中最重要的变更,为 $.ajax 带来了许多性能、稳定性和功能改进。更多信息请参见 这里 #7195
  • 现在支持 jQuery 中的子类化 #7901
  • 删除了使用 noConflict() 时发生扩展冲突的可能性(V8 速度很快!)。扩展字符串现在使用随机数 + jQuery 版本来区分 jQuery 实例,而不是毫秒时钟时间。 #6842
  • 对 $.get 和 $.post 中的代码进行去重。 #7847
  • 当原生浏览器事件在 DOM 中向上冒泡时,确保 jQuery 的事件对象反映正确的 isDefaultPrevented 值。 #7793
  • 不再在 buildFragment 中缓存非 HTML 字符串,以避免与 Object 方法(如 toString)的名称发生潜在冲突。测试表明,这可能会带来适度的性能改进。 #6779
  • 更新 cloneCopyEvent,使其在克隆元素时不再创建多余的数据对象。公开了一个新方法 $.hasData,用于确定对象是否包含任何数据。 #7165
  • 在复制事件时使用 for 循环而不是 for/in 循环,这样代码就可以使用增强的 Array.prototype。 #7809#7817
  • 修复了 fadeIn 在内联元素上无法正常工作的错误。 #7397
  • 重写了 IE 的克隆函数,使其在所有已知情况下都能正常运行。 #4386#5566#6997
  • 修复了 IE 在普通 JS 对象上分发“submit”事件时崩溃的错误。 #6398
  • 修复了 1.4 中的回归错误,该错误导致脚本传输的缓存控制设置不正确。 #7578
  • 提高 get() 在负索引上的性能。 #5476
  • 如果属性包含回车符 (\r) 字符,则 hasClass 和 removeClass 在 IE 中无法正常工作。 #7673
  • 修复了 1.4.4 中的回归错误,该错误导致在非 DOM 元素上调用 $.fn.data 而不带参数会中断。 #7524
  • 修复了 IE 中由 $.ajax 的自定义中止函数引起的内存泄漏。 #6242
  • 防止 IE 中的禁用元素触发 live 事件。 #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
  • 脚本的 onload 处理程序将事件作为第一个参数传递,因此 statusText 现在作为第二个参数传递给中止。 #7865
  • 关于 xhr,将 contentType 设置为 false 现在会阻止发送 Content-Type 标头。 #7465
  • 序列化文本时,我们现在根据 application/x-www-form-urlencoded 规范将所有换行符编码为 CRLF 对。 #6876
  • 修复了 IE6 中的错误,该错误导致某些事件处理程序引起跨页面内存泄漏。 #7762
  • 跨域检测测试现在包括检查协议、主机名和端口。 #7465
  • 修复了包含句点的 ID 会在 find() 中断而不会返回结果的问题。 #7533
  • 已修复 next/adjacent 选择器在没有“prev”元素的情况下不再起作用的回归错误。 #7452
  • 修复了 1.4.3 中的回归错误,该错误阻止在节点类型为 1 的非 DOM 元素节点上使用 attr() #7452#7500
  • 修复了包含 jQuery 1.3.2 会导致 IE8 中屏幕右侧出现边框的错误。 #5575
  • 我们修复了将额外方法添加到 Array.prototype 并使用 jQuery.clone(true) 克隆元素导致事件绑定无效的问题。 #6355
  • 修复了 nth-child 在 Internet Explorer 中无法正确处理空格的问题。 #7558
  • 我们修复了使用 live 事件时 mouseenter/leave 类似于 mouseover/out 的错误。 #5821
  • 修复了 1.4.3 中的回归错误,该错误导致 eq() 选择器不再与 previous 和 adjacent 选择器一起使用。 #7906
  • 更新了有关 event.currentTarget 的文档,以解决有关 jQuery.proxy 的任何混淆。 #7628
  • 修复了 xhr.setRequestHeader(‘Accept’,…) 附加值而不是替换值的问题。 #6230
  • 修复了 IE 中 ajax 方法对以“+xml”结尾的内容类型(例如 rss+xml)失败的问题。 #4958
  • 对 ajax 的更新现在允许中止任何请求。 #3442
  • 修复了 FireFox 3.6.11 中的 .slideUp() 问题,该问题先前隐藏了框架集边框和图例,但未覆盖其他元素遮盖的任何内容。 #7308
  • 我们现在支持跨浏览器 XML 解析。 #6693
  • 修复了在 .ajax() 方法中使用 dataType:’json’ 时,数据对象在 IE6 和 7 中未定义的错误。 #6106
  • 修复了 JSONP 调用在调用完成时未删除脚本标记的问题。 #7418
  • 更新了文档以反映使用 delay() 与 show() 且未指定持续时间时的行为。 #7543