jQuery Conference 2012:英国 – 培训研讨会公布

发布于 作者:

我们很高兴地宣布 两个培训研讨会,用于今年的 英国会议。培训将由 Doug NeinerRalph WhitbeckMike Hostetler 来自 appendTo 授课。会议的普通门票现已售罄,但您可以购买会议/培训套餐并仍然参加会议。

appendTo

appendTo 将提供 jQuery 入门jQuery Mobile 研讨会。研讨会将于 2012 年 2 月 9 日星期四在英国牛津的 Lady Margaret Hall 举行。

jQuery 入门

jQuery 已成为开发者最受欢迎的 JavaScript 库,因为它易于学习和编写。本课程将带领学生了解 jQuery 的基础知识,重点是前端开发。本材料旨在为开发者建立一个核心基础。通过对 jQuery 和 JavaScript 的扎实理解,开发者将有信心为他们的 Web 应用程序添加丰富的功能。

jQuery 涵盖的主题*

  • 介绍
  • 查找某物,执行某事
  • jQuery 函数
  • jQuery 对象
  • 事件/Ajax/更多…

* 主题可能会发生变化

jQuery 入门研讨会的费用为 £320 + 增值税,包含会议门票,仅培训费用为 £160 + 增值税。

jQuery Mobile

jQuery mobile 作为移动 Web 开发的潜在优秀解决方案,获得了不可否认的关注。凭借渐进增强的方法,jQuery mobile 旨在为所有人提供移动 Web 体验,同时奖励那些拥有能够获得丰富体验的移动设备的设备用户。

本次培训将全面回顾 jQuery Mobile 框架,介绍其所有新功能和可用于构建强大且跨平台移动站点的功能。将涵盖整个 API,以及如何充分利用每个组件的示例。

培训最后将演示从头开始构建 jQuery Mobile 应用程序的过程,直到使用 PhoneGap 编译应用程序的本机版本。

涵盖的主题*

  • 移动 Web 的现状
  • jQuery Mobile 功能概述
  • 从头开始构建 jQuery Mobile 应用程序
  • 使用 jQuery Mobile + PhoneGap 实现原生应用

* 主题可能会发生变化

jQuery Mobile 研讨会的费用为 £420 + 增值税,包含会议门票,仅培训费用为 £270 + 增值税。

培训研讨会将于 2012 年 2 月 9 日在 Lady Margaret Hall 举行,而不是会议将要举行的 Saïd Business School。

jQuery 1.8 创意征集

发布于 作者

我们准备好进行下一轮社区意见征集,这次是针对 1.8 版本! 这是你提出建议的机会,我们可以修复、添加、更改或删除 jQuery 中的内容,使其更好。

你可以使用 此表单 添加建议;尽可能提供指向错误报告、包含详细描述的页面或代表你的想法的实现的链接。 我们希望在 12 月 5 日之前收到你的所有意见,以便在制定 1.8 路线图之前阅读和讨论它们。

非常感谢大家在我们的 早期博文中 提出的关于如何通过精简 jQuery 来改进它的建议。 我们已经过这些评论,并对如何在未来的版本中解决其中一些问题有一些想法。

创建一个可配置的下载构建器

几个人想知道为什么我们没有一种方法来构建一个只包含你需要的 jQuery 部分的文件,因为 jQuery UI 例如,有这个选项。 情况并不完全相同。 如果你使用,比如说 UI Accordion,你是因为直接调用它而知道的。 你通常不知道你或者你页面上包含的某个插件 是否在使用 $.fn.prepend() 或 $.fn.animate()。 你是否使用它们甚至可能取决于你在运行时传递给插件的参数。

为了使 jQuery 开发易于管理,并确保 CDN 可以提供一个每个人都可以在互联网上共享和有效缓存的单个文件,团队希望坚持使用单个文件作为其主要产品。 创建可配置的下载可能会略微改善文件大小,但它也会使文档、插件使用和调试复杂化。 这对你和我们来说都是更多的工作。

我们已经开始努力通过消除 jQuery 内部不必要的依赖关系来提高模块化。 我们宣布的许多弃用功能将指向删除这些依赖关系。 通过奠定这个基础,那些想要创建他们自己更小的 jQuery 子集或模块化版本的人应该会更容易。

然而,我们相信我们可以做得更好,并希望为任何用户提供创建包含应用程序代码和仅需的 jQuery 部分的最优最小化文件的自动化方法。 特别是,我们正在与 Google Closure Compiler 团队合作,看看是否可以使用其 ADVANCED_OPTIMIZATIONS 选项。 我们将在开发过程中提供更多信息。

等到 2.0 版本再删除内容

我们对现有的所有 jQuery 代码的破坏非常敏感。 这就是为什么我们尽可能早地弃用内容,以便人们有足够的时间更改他们的代码。 仅仅因为我们今天弃用了一些内容,并不一定意味着我们会在下一个版本中删除它。 我们认为 1.8 中实际删除的内容很少,不太可能影响大多数用户。

如果我们的 Closure Compiler 实验成功,我们甚至可能能够保留许多弃用功能,但如果你不使用它们并构建包含 jQuery 的自定义应用程序文件,它们将被自动删除。 这将是两全其美。

删除对 IE 6、7 和/或 8 的支持

这个话题一直被不断提出,所以让我们一次性解决它。 人们倾向于高估 jQuery 中专门与 IE 相关的代码量。 IE 6 和 IE 7 中的大多数问题也存在于 IE 8 中,因此只要后者仍然具有可观的桌面市场份额并且必须支持,就删除前两个的支持不会带来实际的大小或复杂性优势。 即使是微软本身也不喜欢这些侏罗纪公园浏览器,但现在删除对它们的的支持会破坏许多用户的网站。

也就是说,我们知道在某些情况下,例如移动浏览器,不需要旧版 IE 的支持。 我们正在研究将尽可能多的这些代码放入一个明确标记的块中,以便愿意创建自己的自定义 jQuery 版本的人可以轻松删除它。 也许也可以借助 Closure Compiler 解决这个问题。 但是,我们不确定这是否会提供显著的 gzip 文件大小节省,并且不会提高性能,因为其他浏览器不会采用这些代码路径。

删除 jQuery.browser

我们已经记录了近两年,我们打算将 jQuery.browser 移动到一个插件中,并且几个人也在评论中建议这样做。 浏览器嗅探不是查找功能的可靠方法,我们建议使用像 Modernizr 这样的工具。 用于浏览器嗅探的正则表达式很大并且不易压缩;将其移动到插件将确保只有使用它的人必须为此付出大小代价。

你的想法呢?

请抓住这个机会给我们你的意见。 团队期待审查你的建议。 哦,别忘了尽快尝试 jQuery 1.7.1!

jQuery 1.7.1 发布

发布于 作者:

在美国,我们本周正在庆祝感恩节。对于居住在世界其他地方的人们来说,这是一个安装和测试新的 JavaScript 库版本,同时享用妈妈自制美食的时刻。有点像代码冲刺,但食物更好。我们邀请全世界的人们加入这些传统。

为了开启庆祝活动,jQuery 团队非常感谢地发布了 1.7.1 版本!在本轮中,我们对各种错误进行了朝圣般的进展,如下所示。我们正在 jQuery CDN 上提供美味的副本,新鲜出炉。

这些最新文件也应该很快在主要的 CDN 上提供,但请耐心等待,因为本周对他们来说也是一个假期。

请安装并测试您代码中的最新 jQuery 版本。我们希望您会觉得它很美味。如果我们忘记了炸掉火鸡般的错误,我们想听听您的意见。只需为遇到的问题创建一个具体的测试用例(我们喜欢 jsFiddle.net 用于此目的),并在 bugs.jquery.com 上创建一个错误报告。

此外,请欢迎新的 jQuery 核心团队成员 Mike Sherov!我们感谢他的帮助,为我们即将到来的版本所做的一切。Mike 在纽约市的 SNAP Interactive 拥有一份全职工作,但在业余时间为该项目做出贡献。请像 Mike 一样,尽你所能帮助该项目。不一定是编码。我们总是可以在论坛上回答问题或只是重现和识别错误跟踪器上报告的晦涩错误方面获得帮助。请参阅我们的 参与 页面以获取更多信息。

我们将在一两天内开放 1.8 版本的建议征集。请查看 1.7.1 版本,并思考我们可以在下一个大版本中添加什么样的超棒功能!

jQuery 1.7.1 变更日志

1.7.1 版本的变更日志。

Ajax

  • #10723:jqXHR.always() 返回 Promise 而不是 jqXHR 对象

属性

  • #10724:$(document).text() 始终返回一个空字符串
  • #10773:removeAttr 在边缘情况下很脆弱

构建

  • #10630:修复与焦点相关的测试失败以解决 Swarm 失败

核心

  • #10616:.eq 中未对 -1 进行类型强制转换
  • #10646:让 jQuery.error 抛出 instanceof Error 对象
  • #10682:使用 $(‘ ‘) 创建 DOM 元素会泄漏内存并跳过片段缓存
  • #10687:jQuery 过早地调用 AMD define() 全局函数
  • #10690:isNumeric

Css

  • #10733:在 css 模块中使用 for 循环代替 jQuery.each

数据

  • #10675:使用 internalKey 快捷方式代替 jQuery.expando

Effects

  • #10669:.animate() 不再动画百分比(%) 宽度
  • #10750:stop 中包含“null”的对象会导致错误

事件

  • #10676:不再将 wheelDelta 添加到 mousewheel 事件
  • #10701:使用 submit 函数提交表单时出现问题
  • #10704:special.handle 方法应在 origType 名称下触发
  • #10705:off bug 事件名称解析器
  • #10712:触发 live 绑定的 blur 失败
  • #10717:触发的 load 会冒泡到 window
  • #10791:委托事件在 SVG 元素上失败
  • #10794:.triggerHandler 不应 .preventDefault()
  • #10798:live(“submit”) 和 .submit() 会导致无侵入式 ajax live 触发两次
  • #10844:.delegate() 在提交表单时不起作用,因为表单包含 name 为“id”的输入

操作

  • #10177:.wrap 中回调函数的索引始终为 0
  • #10667:HTML5 支持在 .wrapAll() 中会添加一个“:”到元素
  • #10670:rnoshimcache 可能没有正确构造
  • #10812:将空对象传递给 .before() 或 .after() 会在 IE7 中引发异常

其他

  • #10691:删除单元测试中所有“equals”和“same”函数

支持

  • #10629:IE 对假的 body 过于敏感。探索清理 support.js 以避免未来的崩溃。
  • #10807:注释中的非 ASCII 撇号

对 jQuery 感到厌倦

发布于 作者:

TL;DR 负责监督 jQuery 财务和管理的机构,今天之前被称为 jQuery 团队,现在被称为 jQuery 董事会。jQuery 团队适用于任何对 jQuery 及其相关项目投入大量时间做出贡献的人。

随着 jQuery 从 2005 年的一个很酷的想法 发展到 当今互联网上使用最广泛的 JavaScript,支持其开发和社区所需的组织结构也随之增长。随着时间的推移,电子邮件链变成了邮件列表,从这些列表中演变出一个非正式的联盟,被称为 jQuery 团队。要加入这个团队,你所要做的就是对项目的某个方面做出持续的贡献,最终 John 会将你的名字添加到我们的文档 wiki 中的一个页面。

到 2009 年,团队希望巩固项目的长期未来,因此我们接受了 加入软件自由保护协会 的邀请,从他们那里获得了大量的行政和法律支持。虽然 SFC 提供“项目可以继续以加入保护协会之前相同的方式运行,而无需选择董事会或任何其他公司管理层”,但团队选择实施一种治理系统,即项目的官方决策将在 公开投票 由“核心团队”的成员传达给保护协会。最初有 21 名成员。这为原本比较临时性的流程赋予了大量的正式性,虽然该系统运作良好,但同时也伴随着一些困惑。

  • 一方面是负责项目整体财务和管理决策的投票成员,另一方面是实际致力于 jQuery 核心本身开发的人员。这两个群体有时被称为 jQuery 核心团队,这有点误导。
  • 当有新人出现并成为项目某个部分积极贡献者时,告诉他们“嘿,干得好,但你 *不* 在团队中!” 并不好玩。
  • 仅仅因为你对 jQuery 核心、UI 或 Mobile 的黑客行为非常感兴趣(或者致力于文档工作,或者任何其他可以帮助项目的方式),并不意味着你丝毫没有兴趣参加冗长的会议,讨论如何分配资金以及如何改进下次会议的饮料服务。
  • 随着人们的生活起伏,他们的贡献能力发生变化是很正常的。在真正积极的贡献者和项目大方向管理中的投票权之间应该有什么样的关联?

为了尝试解决一些这种困惑并更清晰地阐明团队的目的,jQuery 团队现在被称为 jQuery 委员会,适用于团队的所有治理规则现在也适用于委员会。委员会负责

  • 批准和拨款
  • 向 SFC 代表 jQuery 项目的意图
  • 监督和指导子团队,并选出负责项目各个方面的子团队负责人
  • 对自身的组成进行投票

如果你一直想“加入团队”,但对它的含义或你会做什么不确定,这是一个好消息!我们完全拥抱 维基百科对团队的定义:一群为了共同目标而联系在一起的人(或动物!)。因此,任何在一段时间内自愿积极参与 jQuery 子团队的人都将被邀请加入 jQuery 团队(由子团队负责人酌情决定),这样你就可以放心地把这些放在你的演示文稿、冰箱等等上了。

没有改变的是,如果你对 Web 开发充满热情,并试图找到一种改变世界各地开发人员的方式,那么 jQuery 社区中一定有你的位置。跳到 论坛,帮助另一位开发人员。前往我们的 各种 bug 追踪器,帮助分类开放的问题——或者 深入研究,看看你是否可以提供补丁。如果你只想了解一下情况,请加入 每周 IRC 会议。想参与一个特定的项目吗?请查看 更新后的团队页面,并与合适的子团队负责人联系!有一点是肯定的

jQuery wants you!

jQuery 1.7.1 RC1 发布

发布于 作者

为了让你知道我们在 jQuery Central 并没有睡着,我们发布了 jQuery 的一个新预览版本。它修复了自原始 1.7 版本发布以来社区报告的问题。请在你的应用程序中测试代码,确保没有重大问题。如果你尝试了 jQuery 1.7 并报告了一个错误,它应该在这个版本中得到修复。

您可以从 jQuery CDN 获取代码

你可以通过将这段代码放入你现有的应用程序中,并告诉我们是否有任何不再起作用的地方来帮助我们。请 提交一个 bug,并确保说明你正在测试 jQuery 1.7.1 RC1。

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

jQuery 1.7.1 RC1 变更日志

1.7.1 RC1 版本的当前变更日志。

Ajax

  • #10723:jqXHR.always() 返回 Promise 而不是 jqXHR 对象

属性

  • #10724:$(document).text() 始终返回一个空字符串
  • #10773:removeAttr 在边缘情况下很脆弱

构建

  • #10630:修复与焦点相关的测试失败以解决 Swarm 失败

核心

  • #10616:.eq 中未对 -1 进行类型强制转换
  • #10646:让 jQuery.error 抛出 instanceof Error 对象
  • #10682:使用 $(‘ ‘) 创建 DOM 元素会泄漏内存并跳过片段缓存
  • #10687:jQuery 过早地调用 AMD define() 全局函数
  • #10690:isNumeric

Css

  • #10733:在 css 模块中使用 for 循环代替 jQuery.each

数据

  • #10675:使用 internalKey 快捷方式代替 jQuery.expando

Effects

  • #10669:.animate() 不再动画百分比(%) 宽度
  • #10750:stop 中包含“null”的对象会导致错误

事件

  • #10676:不再将 wheelDelta 添加到 mousewheel 事件
  • #10701:使用 submit 函数提交表单时出现问题
  • #10704:special.handle 方法应在 origType 名称下触发
  • #10705:off bug 事件名称解析器
  • #10712:触发 live 绑定的 blur 失败
  • #10717:触发的 load 会冒泡到 window
  • #10791:委托事件在 SVG 元素上失败
  • #10794:.triggerHandler 不应 .preventDefault()
  • #10798:live(“submit”) 和 .submit() 会导致无侵入式 ajax live 触发两次

操作

  • #10177:.wrap 中回调函数的索引始终为 0
  • #10667:HTML5 支持在 .wrapAll() 中会添加一个“:”到元素
  • #10670:rnoshimcache 可能没有正确构造
  • #10812:将空对象传递给 .before() 或 .after() 会在 IE7 中引发异常

其他

  • #10691:删除单元测试中所有“equals”和“same”函数

支持

  • #10629:IE 对假 body 过于敏感。探索清理 support.js 以避免未来崩溃

即将举行的 jQuery 活动

发布于 作者

jQuery Summit 2011

又到了每年这个时候(不,不是圣诞节!而是更好的东西!)——年度(在线)jQuery Summit。今年 Environment For Humans (E4H) 准备了一系列精彩的课程,包括关于 jQuery 插件编写最佳实践、使用 HTML5 和 Popcorn.js 创建交互式体验以及 jQuery 代码测试最佳实践等。

汇集了网络上最有经验的 jQuery 和 JavaScript 专业人士分享技巧、窍门和他们的经验,你一定会学到一些新的东西,这些东西可以帮助你自己的项目。如果你以前没有参加过峰会,你将会大吃一惊。

峰会是一个完全在线的为期两天的双轨会议,其中一个轨道专门面向设计师,另一个轨道完全专注于开发人员。由于活动完全在线,无论你在家还是在办公室,都可以实时访问它。对于担心错过任何内容的人,E4H 已经为你做好了准备;所有门票都包括高质量的录音,稍后可以随时回放。

折扣

如果你有兴趣参加,E4H 为我们提供了一个非常特别的 20% 折扣码,可以在他们的活动网站上兑换。只需在购买门票时输入 20JQUERY,或使用以下链接:http://jquerysummit2011.eventbrite.com/?discount=20JQUERY

详情

课程

  • jQuery & CSS 选择器 – Estelle Weyl
  • jQuery & HTML5 视频 – Rick Waldron
  • jQuery UI – Andrew Wirick
  • 插件编写最佳实践 – Ben Alman
  • jQuery & 浏览器插件 – Sarah Chipps
  • 渐进增强 – Nicholas Zakas
  • jQuery & 响应式 Web 设计 – Dave Rupert
  • jQuery 的现状 – Adam Sontag
  • 大型应用程序架构 – Addy Osmani
  • jQuery & iframe 编程 – Ben Vinegar
  • 构建基于 DOM 的应用程序 – Garann Means
  • Deferreds 进入 jQuery – Dan Heberden
  • jQuery 开发工作流程 – Anton Kovalyov
  • jQuery & Backbone.js – Matt Kelly
  • jQuery & QUnit – Ben Alman

门票: http://jquerysummit.com

日期

设计师轨道:11 月 15 日星期二

开发人员轨道:11 月 16 日星期三

 

Bocoup 的 jQuery 培训

对于那些更喜欢面对面培训的人来说,小组培训是提高你的 jQuery 技能的最佳方式之一。幸运的是,位于波士顿的 Bocoup 已经安排了许多全面的 jQuery 培训课程,分别在 2012 年 1 月和 3 月举行。

课程将在波士顿的 Bocoup Loft 举行,10% 的利润将直接捐给 jQuery 基金会。如果你有兴趣,请尽快报名,因为班级规模有限!

更多信息,请查看 http://training.bocoup.com/comprehensive-jquery/

 

HTML5、JavaScript 和 jQuery 的前端研讨会

最后,如果你有兴趣学习更通用的前端技能,Marc Grabanski 正在举办面向希望掌握前端开发艺术的开发人员的前端大师研讨会系列。

培训由六个研讨会组成,将重点关注前端主题,包括 jQuery、jQuery UI、HTML5 & CSS3、Titanium Mobile 以及使用包括 jQuery 团队成员 Karl Swedberg 和 Scott Gonzalez 在内的演讲者构建大型 JavaScript 应用程序。

有关门票和更多信息,请参见 http://frontendmasters.com

构建更精简的 jQuery

发布于 作者

jQuery 已经超过五年了!在这段时间里,它随着浏览器、网站、设备、开发人员和它所服务的用户一起发展。它也,嗯,增长了很多。jQuery 添加了很多有用的功能,但也积累了我们不希望永久支持的垃圾。它可能不是在具有高速连接的台式 PC 上的一个问题,但我们希望 jQuery 也能成为移动设备的良好解决方案。

除了我们不断提高性能的努力之外,我们即将发布的版本的首要任务是更小的 gzip 文件大小。当每项新功能或错误修复都必须保留所有现有功能和行为时,很难做到这一点。因此,今天,我们想开始讨论通过弃用一些功能来精简 jQuery API。以下是我们的弃用指南

  • 我们认为该功能不代表 jQuery 使用的当前最佳实践。
  • 该功能被证明不受欢迎、令人困惑、效率低下或无效。
  • 实际上或可行地增强该功能或解决其局限性是不切实际的。
  • 在未来的某个时候删除它可能会带来显着的可用性、大小或性能优势。

弃用只是一个你可以参与的过程的第一步。我们的目标是

  • 解释弃用特定功能的原因,如上所述。
  • 在弃用和删除之间提供至少一个主版本,通常更多。
  • 提供弃用功能的替代方案,以便迁移不痛苦。
  • 倾听社区对弃用和删除的反馈。

有时,如在 1.7 版本中 event.layerX/layerY 的情况,如果认为立即删除该功能比保留它造成的痛苦更小,我们将采取更短的通知期破坏性更改。那些希望是罕见的例外。

1.7 版本弃用

考虑到这些事情,我们认为以下功能在 1.7 版本中已被弃用。使用它们的代码仍然有效,但推荐的替代方案是与未来版本兼容的更好选择。

.live() 和 .die():我们继续收到许多错误报告,并看到用户对 .live() 方法的怪癖感到困惑。常见问题已在其 更新的 API 页面上记录。我们强烈建议使用 .on() 或 .delegate() 来编写新代码,因为它们是更好的 API。鉴于它的广泛使用,我们不太可能在 1.8 中删除此 API,但请尽快更新你的代码。

非标准事件属性: 作为我们提高事件处理程序性能的一部分,我们还在弃用从本机事件对象到 jQuery 事件对象的几个事件属性的复制,并将它们从 1.8 版本中删除:attrChange、attrName、relatedNode 和 srcElement。与其通过 event.NAME 访问这些属性,不如在需要时通过 event.originalEvent.NAME 访问它们。

$.ajax() Deferred 别名: 在 1.5 版本中,我们将 .error()、success() 和 .complete() 定义为 jqXHR 对象的 Deferred 的 .fail()、.done() 和 .always() 方法的别名。虽然当时这似乎是个好主意,但它使 jqXHR 成为一个非标准的 Deferred。这不好。尽可能使用 deferred/promise 方法名而不是 jqXHR 方法名。我们仍然需要做一些工作来提供完整的迁移路径,因此我们可能会在 1.8 之后继续支持这些别名。

deferred.isResolved() 和 deferred.isRejected(): 现在 Deferreds 和 Promises 具有进度通知和一个方便的 .state() 方法,我们正在弃用这些旧方法,并将它们从 1.8 版本中删除。使用 N-1 个布尔方法来获取 N 状态对象的状态是“二十个问题”的残酷代码版本。基于 Deferred 的代码很少需要检查状态,并且现在返回的字符串更方便用于调试场景,在调试场景中它经常被使用。

.attr(“value”) 在 input 元素上: 为了向后兼容,我们一直返回当前值(就像“输入框中当前的内容”),而不是真实的属性(HTML 中 value 属性所说的那样)。这让我们无法提供真实的属性值,并且令人困惑,因为 W3C 选择器作用于属性而不是当前值。因此,我们正在弃用此行为,并在 1.8 中将其删除。始终使用 .val() 方法获取 input 元素的当前实时值。在我们可以恢复属性之前,可以使用 $("selector")[0].getAttribute("value"),但 IE 6/7 除外,在这些浏览器中它仍然会返回当前值。(我们的 1.8 解决方案将在所有浏览器中获取属性值,这也是我们急于进行此更改的另一个原因。)

.closest(Array) 返回 Array: 此签名有点奇怪,它是为旧的 live 事件代码创建的,但它返回一个 Array 而不是一个 jQuery 对象。从 1.8 开始,我们计划将其删除。.closest() 的其他签名将保留,不受影响。

.data(“events”): jQuery 将其事件相关数据存储在一个名为(等待一下)events 的数据对象中,该对象位于每个元素上。这是一个内部数据结构,因此在 1.8 中,它将被从用户数据名称空间中删除,以避免与同名项目冲突。jQuery 的事件数据仍然可以通过 jQuery._data(element, "events") 访问,但请注意,这是一个未记录的内部数据结构,不应进行修改。

$.sub() 作为插件: 虽然 $.sub() 对于创建插件的无干扰区域很有用,但它未被 jQuery 核心使用,也没有被其他代码广泛使用,因此我们打算在 1.8 版本中将其过渡为插件以节省空间。

展望 jQuery 1.8

鉴于我们致力于打造一个精简的 jQuery,1.8 版本的新功能筛选将非常严格。即使是与性能相关的提案也需要权衡其使用的空间或节省的空间。可以通过插件、特殊事件、属性钩子或其他 jQuery 扩展机制实现的功能,可能会暂时停留在核心之外。

这引出了一个问题,即我们可以在 1.8 中弃用哪些功能,并最终删除哪些功能,以简化和优化库。这些功能不必完全消失;例如,它们可以移动到一个单独的插件中,并且仅在需要时才包含在内。请查看您如何使用 jQuery,并与您的同事讨论一下。

在几周内,我们将通过另一篇博文开放您对 jQuery 1.8 的想法征集——所以现在就开始思考吧!

编辑: 不,我们还没有删除对 IE6 的支持,而且我们不能。正如 John Resig 在每次 jQuery 会议上提到的那样,IE6 的许多罪恶也降临到 IE7 和 IE8 上,它们加起来仍然拥有超过 三分之一 的桌面浏览器市场份额。在我们可以同时清除 IE7 和 IE8 之前,删除对 IE6 的支持没有意义。

jQuery 1.7 发布

发布于 作者

jQuery 1.7 现已准备好下载!您可以从 jQuery CDN 获取代码

此新版本也应该在一天或两天内提供在 Google 和 Microsoft CDN 上。

感谢您在测试期间的帮助和报告错误,我们相信我们发布了一个稳定可靠的版本。如果您发现问题,请 提交错误报告,并确保在版本选择中选择 jQuery 1.7。另外,请确保提供一个 jsFiddle 测试用例,以便我们快速分析问题。

jQuery 1.7 中的新功能

API 网站上的 1.7 版本标签 是了解此版本新功能的绝佳方式。以下是 1.7 中的主要项目以及 API 文档中尚未提及的一些内容。

新的事件 API:.on() 和 .off()

新的 .on().off() API 统一了将事件绑定到 jQuery 文档的所有方式——而且它们更短!

$(elements).on( events [, selector] [, data] , handler );
$(elements).off( [ events ] [, selector] [, handler] );

当提供选择器时,.on() 类似于 .delegate(),因为它附加了一个由选择器过滤的委托事件处理程序。当省略或为 null 时,该调用类似于 .bind()。有一个模糊的情况:如果 data 参数是一个字符串,则必须提供一个字符串选择器或 null,以便数据不会被误认为是一个选择器。将对象传递给 data,您将永远不必担心特殊情况。

所有现有的事件绑定方法(及其相应的解绑定方法)仍然存在于 1.7 中,但我们建议您在任何使用 1.7 或更高版本的 jQuery 项目中使用 .on()。以下是一些旧 API 调用和新 API 调用之间的映射示例

$('a').bind('click', myHandler);
$('a').on('click', myHandler);

$('form').bind('submit', { val: 42 }, fn);
$('form').on('submit', { val: 42 }, fn);

$(window).unbind('scroll.myPlugin');
$(window).off('scroll.myPlugin');

$('.comment').delegate('a.add', 'click', addNew);
$('.comment').on('click', 'a.add', addNew);

$('.dialog').undelegate('a', 'click.myDlg');
$('.dialog').off('click.myDlg', 'a');

$('a').live('click', fn);
$(document).on('click', 'a', fn);

$('a').die('click');
$(document).off('click', 'a');

委托事件的性能改进

事件委托随着页面大小和复杂性的增长变得越来越重要。Backbone、JavaScriptMVC 和 Sproutcore 等应用程序框架大量使用事件委托。考虑到这一点,jQuery 1.7 事件处理程序经过重构,旨在使委托事件更快,尤其是在最常见的情况下。

为了优化代码中最常用的选择器形式,我们检查了 Google Codesearch 中的一个代码截面。在 .live().delegate() 方法调用中使用的近三分之二的选择器采用 tag#id.class 的形式,其中使用了 tag、id 或 class 中的一个或多个。通过在事件附加时使用 JavaScript 解析这些简单的选择器,我们能够在事件传递期间优于浏览器本机代码实现的 matchesSelector。对于更复杂的选择器,我们仍然使用 Sizzle 引擎,因此所有现有代码都应该继续工作。

最终结果是委托事件的传递速度比 1.6.4 快约一倍。

更好的 IE6/7/8 中的 HTML5 支持

任何尝试使用新的 HTML5 标签(如 <section>)的人无疑会遇到 IE 6/7/8 不仅不理解这些标签,而且实际上会从文档中删除它们的问题。使用 jQuery 1.7,我们内置了对使用旧版 IE 中 HTML5 标签的支持,例如 .html() 方法。此支持与之前需要 innerShiv 的支持相当。您仍然必须在旧版 IE 的文档的 <head> 中包含 html5shiv (或 Modernizr) 以获得 HTML5 标签支持。 有关更多背景信息,请参阅 HTML5 Shiv 的故事

切换动画直观地工作

在以前版本的 jQuery 中,诸如 .slideToggle().fadeToggle() 之类的切换动画在动画相互堆叠且先前的动画使用 .stop() 终止时无法正常工作。这已在 1.7 中 修复,因此动画系统会记住元素的初始值并在切换动画过早终止的情况下重置它们。

异步模块定义 (AMD)

jQuery 现在支持 AMD API。请注意,jQuery 1.7 本身不是脚本加载器;它与 AMD 兼容的加载器(如 RequireJS 或 curl.js)配合使用,以便可以动态加载它,并且加载器可以控制 ready 事件。

jQuery.Deferred

jQuery.Deferred 对象已扩展了新的进度处理程序和通知方法,这些方法会调用这些处理程序。这允许您异步通知监听器请求的进度,而无需解析或拒绝请求。此外,还有一个新的 state() 方法,它返回 Deferred 的当前状态;它主要用于调试。

Deferreds 现在使用新的 jQuery.Callbacks 功能实现,这是一种排队和触发一系列处理程序的一种通用方法。此功能可能对插件编写者感兴趣,尽管 Deferreds 和事件子系统为此类功能提供了一个更高级别的接口。

jQuery.isNumeric()

在 jQuery 内部,我们发现有几种情况需要知道一个参数是否为数字,或者如果它是其他类型,是否可以成功转换为数字。我们决定编写并记录 jQuery.isNumeric(),因为它是一个有用的工具。将任何类型的参数传递给它,它将返回 truefalse,具体取决于情况。

已删除的功能

event.layerX 和 event.layerY: 我们已在 1.7 版本中删除了这些非标准属性。虽然我们通常会对这些属性进行弃用通知期,但 Chrome 16 会在页面上生成大量 控制台警告消息。由于此原因,我们决定立即删除它们。在仍然支持这些属性的平台上,可以通过 event.originalEvent.layerXevent.originalEvent.layerY 访问它们。

jQuery.isNaN(): 此未记录的实用函数已被删除。它令人困惑,因为它挪用了内置 JavaScript 函数的名称,但没有相同的语义。新的 jQuery.isNumeric() 具有类似的目的,但具有记录和支持的优势。尽管 jQuery.isNaN() 未记录,但 Github 上的几个项目正在使用它。我们已联系他们并要求他们使用 jQuery.isNumeric() 或其他解决方案。

jQuery.event.proxy(): 此未记录且已弃用的方法已被删除。用户应该调用记录的 jQuery.proxy 方法。

jQuery 团队,以及您的贡献

我想表彰我们的常规团队贡献者在发布此版本中所做出的令人难以置信的工作,特别是 Timmy Willison (timmywil on Github)、Corey Frang (gnarf)、Rick Waldron (rwldrn) 和 Julian Aubourg (jaubourg)。Karl Swedberg (kswedberg) 和 Addy Osmani (addyosmani) 努力使 API 网站上的新文档成形。另外,感谢 Mike Sherov (mikesherov),一位新手贡献者,他已经为几个棘手的错误创建了补丁。非常感谢所有其他人报告错误、提交拉取请求、审查提交以及以其他方式确保我们尽最大努力。

尽管如此,我们总是需要更多的帮助,而你可以在这方面做出贡献。你能做的最简单也是最重要的事就是偶尔用你的代码和期望来测试我们的开发版本。它始终位于 https://code.jqueryjs.cn/jquery-git.js,并且每次向我们的 github.com 的 master 分支提交新的代码时都会构建一个全新的副本。如果你在最终版本中发现了一个错误,请用 jquery-git.js 进行测试,看看它是否已经被修复。这非常简单,因为 jsFiddle.net 提供了一个选项,可以使用 jquery-git.js 文件作为“jQuery (edge)”来测试你的代码。

如果你想做更多的事情,我们非常乐意接受你的帮助!我们已经编写了一份 文档,可以帮助你开始这个过程,并且我们中的一到几个人通常在 IRC 的 #jquery-dev 频道中可用,如果你需要更多的帮助或信息的话。

jQuery 1.7 变更日志

1.7 版本的当前变更日志。

Ajax

  • #9399:弃用 jqXHR.success 和 jqXHR.error

属性

  • #5479:removeAttr:移除多个属性
  • #6743:将 enctype 映射到编码,具体取决于浏览器
  • #10176:注入的 script 标签被评估两次
  • #10278:checkboxEl.attr(‘checked’) 在 checkboxEl.click() 之后返回陈旧的值
  • #10429:IE7 – 调用 removeAttr(‘contenteditable’) 时出现无效过程调用或参数
  • #10514:removeAttr 在 IE6/7 中无法移除 class 属性

核心

  • #6485:IE 中的 HTML5 解决方案
  • #7102:将 jQuery 注册为 CommonjS 异步模块
  • #9453:$.inArray 不支持 fromIndex
  • #10478:将 jQuery.isNaN 切换到 jQuery.isNumeric

Css

  • #10267:IE8 和 window.is(‘:visible’) 崩溃

数据

  • #7323:允许使用 $.fn.removeData 一次移除多个数据键
  • #8909:$(element).data() 会扫描比需要的更多的属性。
  • #8921:jQuery 私有数据应保持私有

Deferred

  • #8856:请求:deferred.isUnresolved()
  • #9033:try{ } finally{ } 在 IE8 中出现错误
  • #9398:改进 Deferreds 的建议

Dimensions

  • #9434:.outerWidth()/.outerHeight()/.innerWidth()/.innerHeight() 应适用于 window 和 document

Effects

  • #5684:效果:动画回调中的异常导致无限循环
  • #6150:.stop 有时无法清除 .delay
  • #6641:在动画完成回调中调用 stop() 会导致其他动画冻结
  • #8685:动画应跟踪动画状态,以便正确处理堆叠动画
  • #9280:允许为 animate() 使用多个效果队列
  • #9548:animate 不适用于 svg 元素的 fill-opacity css 属性
  • #10445:将 queue 设置为 true 会导致错误
  • #10497:.stop 应允许选择要停止的队列
  • #10622:.show() 无法正确恢复 CSS 设置的“display”值

事件

  • #3368:event.metaKey 应仅在非 Mac 上分配给 event.ctrlKey
  • #6170:jQuery(window).scroll(); 会导致 IE* 滚动到 0,0
  • #6319:在 IE 中,change 处理程序内的 stopPropagation 会错误地应用于 keydown 事件
  • #6386:支持通过“event.special.live.add”获取 live 事件的数据参数
  • #6593:IE8:通过 jQuery 附加的 DOM 0 事件处理程序在单独的处理程序时会被调用两次
  • #6667:在某些条件下,submit 事件在 IE* 中无法委托
  • #6903:特殊事件需要一种方法来确定它们是使用 .bind 还是 .live/.delegate 绑定的
  • #6942:JQuery.event.fix 会导致在处理关键事件时出现不必要的重绘
  • #7139:“hover”事件别名应适用于 .bind 以及 .live
  • #7161:表单元素上的提交事件在 IE 中未正确解绑
  • #7444:使用“Enter”而不是按钮单击提交表单时,IE8 或 IE7 会触发 live 提交事件两次。
  • #8157:聚焦一个已经聚焦的文本字段会阻止 change 事件在 IE 中触发
  • #8728:当离开的元素被移除时,mouseenter 事件不会触发
  • #8789:Meta:事件属性挂钩
  • #8858:特殊事件 – _default 方法无法访问 trigger 方法的数据参数
  • #8866:IE8 input[type=file] 委托的 change 事件文件仅在 blur 时触发
  • #8982:bind(“unload someOther”) => 在卸载时,处理程序不会只执行一次。
  • #9069:当鼠标悬停在元素的子元素上时,使用 live 或 delegate 会触发 mouseleave
  • #9279:delegate() bind 无法正确处理所选元素的 mouseover/mouseout 和 mouseenter/mouseout
  • #9393:统一和简化事件系统
  • #9593:在 IE 中,委托的 submit 事件不是 jQuery.Event 的实例
  • #9724:当 window.parentNode 是 DOM 元素时,trigger 函数中出现无限循环
  • #9901:使用 .delegate 时 event.handleObj.namespace 不正确
  • #9933:jQuery.fn.toggle() 应将状态存储在私有数据对象中
  • #9951:在处理程序中修改 DOM 时,.trigger() 的顺序错误
  • #10375:不要在 jQuery.event.props 中包含 `type`
  • #10438:重命名 jQuery.event.propHooks => .fixHooks
  • #10468:移除已弃用的 jQuery.event.guid 和 jQuery.event.proxy
  • #10489:断开连接的元素在 .trigger() 上冒泡到 window
  • #10531:考虑从 $.event.props 中移除 layerX 和 layerY
  • #10563:jQuery.Event 不再包含事件委托中匹配选择器的元素。
  • #10567:委托事件错误地匹配类名
  • #10575:1.6.4 和 1.7rc1 之间 live 事件传播的破坏性变更
  • #10576:jQuery1.7rc1 和 jQueryMobile1.0rc2 – IE 在 jqm triggerCustomEvent 方法中出现错误

操作

  • #6782:小心允许更多字符串使用 innerHTML
  • #7037:克隆元素时添加了重复的 mouseover 和 mouseout 事件。
  • #10501:HTML5 元素“innerShiv”在 html()/append() 中不一致

其他

  • #10420:MouseWheel
  • #10553:进一步减少最小许可标头

选择器

  • #3144:.text() 方法的结果在不同浏览器中不一致
  • #5637:布尔值(和空)属性选择器失败
  • #6863:更快 getText
  • #7128:由于使用 DOM 属性,属性选择器在 qSA 和 Sizzle 之间不一致
  • #8539:在没有 querySelectorAll 的浏览器中,Sizzle 缓存冲突
  • #9261:Has Attribute 在 filter/children/siblings 中不起作用
  • #9570:选择器 $(‘form[name=”..”]’) 在某些条件下在 IE8 中返回零个元素
  • #10178:$(window).is(“a”) >> 未捕获的 TypeError:无法对未定义的调用方法 ‘toLowerCase’
  • #10315:Sizzle 在使用位置选择器时忽略 seed 参数
  • #10562:siblings 方法在使用 Sizzle 调用伪选择器时返回意外元素

支持

  • #5145:jQuery.support.opacity = false 在 Chrome 浏览器中
  • #6809:

jQuery Conference 2012:英国发布

发布于 作者

jQuery Conference 2012: UK

我们非常高兴地宣布 jQuery Conference 2012:英国,这是在英国举办的第一个 jQuery 会议,将于 2012 年 2 月 10 日举行。会议将在牛津的 Saïd Business School 举行,演讲阵容包括六位 jQuery 团队成员和四位行业专家

jQuery Conference 2012: UK Speakers

门票

你可以在 活动网站上了解更多关于演讲阵容、演讲和地点的详细信息,并且 门票现在在 EventBrite 上发售

组织者

该活动由位于牛津的数字机构 White October 在 jQuery 项目的许可下,并得到 jQuery 团队成员的帮助和支持组织。

赞助

如果你的公司有兴趣赞助该活动,请查看 赞助包,请随时 发送电子邮件或致电 (+44(0)207 976 4894) John 在 White October 讨论不同的选项。

jQuery 1.7 RC2 发布

发布于 作者

今天,在非常可怕的万圣节之后,jQuery 团队从我们的 Github 地牢(呃,仓库)发布了 jQuery 1.7 RC2。除非收到关于真正可怕问题的报告,或者一群拿着火把的乡民出现在我们的门口,否则这段代码将完全是成为 1.7 最终版本的代码。如果有人知道任何理由阻止这段代码成为最终版本,我们需要听到你的尖叫!

HERE LIE THE
BITS FOR RC2;
PLEASE TELL US
IF IT WORKS
FOR YOU

在 RC2 中,我们修复了一个棘手的问题,有时会导致 Internet Explorer 8 在加载 jQuery 时完全崩溃。 恰如其分,崩溃与创建我们用来执行功能检测的 detached <body> 元素有关。 IE8 似乎看到一个 detached body 就会崩溃。 如果你仍然遇到 IE8 崩溃的问题,请告诉我们。

感谢 @warrenparsons 提交的错误报告,我们还修复了一个 可怕的回归,与 .show() 方法有关。我们非常感谢那些测试这些预发布版本的你们的努力。当然,等待最终版本发布再试用要容易得多,但那时你发现的任何问题都会阻止你——以及可能成千上万的其他用户——升级。对我们来说,这真的很可怕。

在接下来的几天里,我们将会在 api.jquery.com 上为 1.7 的许多新增功能和改进创建文档。请耐心等待几天,以便我们清理页面并确保所有内容都已填写并正确链接。要快速了解发生了什么变化,请参阅 1.7 分类

jQuery 1.7 RC 2 变更日志

1.7 RC2 版本的当前变更日志。

Ajax

  • #9399:弃用 jqXHR.success 和 jqXHR.error

属性

  • #5479:removeAttr:移除多个属性
  • #6743:将 enctype 映射到编码,具体取决于浏览器
  • #10176:注入的 script 标签被评估两次
  • #10278:checkboxEl.attr(‘checked’) 在 checkboxEl.click() 之后返回陈旧的值
  • #10429:IE7 – 调用 removeAttr(‘contenteditable’) 时出现无效过程调用或参数
  • #10514:removeAttr 在 IE6/7 中无法移除 class 属性

核心

  • #6485:IE 中的 HTML5 解决方案
  • #7102:将 jQuery 注册为 CommonjS 异步模块
  • #9453:$.inArray 不支持 fromIndex
  • #10478:将 jQuery.isNaN 切换到 jQuery.isNumeric

Css

  • #10267:IE8 和 window.is(‘:visible’) 崩溃

数据

  • #7323:允许使用 $.fn.removeData 一次移除多个数据键
  • #8909:$(element).data() 会扫描比需要的更多的属性。
  • #8921:jQuery 私有数据应保持私有

Deferred

  • #8856:请求:deferred.isUnresolved()
  • #9033:try{ } finally{ } 在 IE8 中出现错误
  • #9398:改进 Deferreds 的建议

Dimensions

  • #9434:.outerWidth()/.outerHeight()/.innerWidth()/.innerHeight() 应适用于 window 和 document

Effects

  • #5684:效果:动画回调中的异常导致无限循环
  • #6150:.stop 有时无法清除 .delay
  • #6641:在动画完成回调中调用 stop() 会导致其他动画冻结
  • #8685:动画应跟踪动画状态,以便正确处理堆叠动画
  • #9280:允许为 animate() 使用多个效果队列
  • #9548:animate 不适用于 svg 元素的 fill-opacity css 属性
  • #10445:将 queue 设置为 true 会导致错误
  • #10497:.stop 应允许选择要停止的队列
  • #10622:.show() 无法正确恢复 CSS 设置的“display”值

事件

  • #3368:event.metaKey 应仅在非 Mac 上分配给 event.ctrlKey
  • #6170:jQuery(window).scroll(); 会导致 IE* 滚动到 0,0
  • #6319:在 IE 中,change 处理程序内的 stopPropagation 会错误地应用于 keydown 事件
  • #6386:支持通过“event.special.live.add”获取 live 事件的数据参数
  • #6593:IE8:通过 jQuery 附加的 DOM 0 事件处理程序在单独的处理程序时会被调用两次
  • #6667:在某些条件下,submit 事件在 IE* 中无法委托
  • #6903:特殊事件需要一种方法来确定它们是使用 .bind 还是 .live/.delegate 绑定的
  • #6942:JQuery.event.fix 会导致在处理关键事件时出现不必要的重绘
  • #7139:“hover”事件别名应适用于 .bind 以及 .live
  • #7161:表单元素上的提交事件在 IE 中未正确解绑
  • #7444:使用“Enter”而不是按钮单击提交表单时,IE8 或 IE7 会触发 live 提交事件两次。
  • #8157:聚焦一个已经聚焦的文本字段会阻止 change 事件在 IE 中触发
  • #8728:当离开的元素被移除时,mouseenter 事件不会触发
  • #8789:Meta:事件属性挂钩
  • #8858:特殊事件 – _default 方法无法访问 trigger 方法的数据参数
  • #8866:IE8 input[type=file] 委托的 change 事件文件仅在 blur 时触发
  • #8982:bind(“unload someOther”) => 在卸载时,处理程序不会只执行一次。
  • #9069:当鼠标悬停在元素的子元素上时,使用 live 或 delegate 会触发 mouseleave
  • #9279:delegate() bind 无法正确处理所选元素的 mouseover/mouseout 和 mouseenter/mouseout
  • #9393:统一和简化事件系统
  • #9593:在 IE 中,委托的 submit 事件不是 jQuery.Event 的实例
  • #9724:当 window.parentNode 是 DOM 元素时,trigger 函数中出现无限循环
  • #9901:使用 .delegate 时 event.handleObj.namespace 不正确
  • #9933:jQuery.fn.toggle() 应将状态存储在私有数据对象中
  • #9951:在处理程序中修改 DOM 时,.trigger() 的顺序错误
  • #10375:不要在 jQuery.event.props 中包含 `type`
  • #10438:重命名 jQuery.event.propHooks => .fixHooks
  • #10468:移除已弃用的 jQuery.event.guid 和 jQuery.event.proxy
  • #10489:断开连接的元素在 .trigger() 上冒泡到 window
  • #10531:考虑从 $.event.props 中移除 layerX 和 layerY
  • #10563:jQuery.Event 不再包含事件委托中匹配选择器的元素。
  • #10567:委托事件错误地匹配类名
  • #10575:1.6.4 和 1.7rc1 之间 live 事件传播的破坏性变更
  • #10576:jQuery1.7rc1 和 jQueryMobile1.0rc2 – IE 在 jqm triggerCustomEvent 方法中出现错误

操作

  • #6782:小心允许更多字符串使用 innerHTML
  • #7037:克隆元素时添加了重复的 mouseover 和 mouseout 事件。
  • #10501:HTML5 元素“innerShiv”在 html()/append() 中不一致

其他

  • #10420:MouseWheel
  • #10553:进一步减少最小许可标头

选择器

  • #3144:.text() 方法的结果在不同浏览器中不一致
  • #5637:布尔值(和空)属性选择器失败
  • #6863:更快 getText
  • #7128:由于使用 DOM 属性,属性选择器在 qSA 和 Sizzle 之间不一致
  • #8539:在没有 querySelectorAll 的浏览器中,Sizzle 缓存冲突
  • #9261:Has Attribute 在 filter/children/siblings 中不起作用
  • #9570:选择器 $(‘form[name=”..”]’) 在某些条件下在 IE8 中返回零个元素
  • #10178:$(window).is(“a”) >> 未捕获的 TypeError:无法对未定义的调用方法 ‘toLowerCase’
  • #10315:Sizzle 在使用位置选择器时忽略 seed 参数
  • #10562:siblings 方法在使用 Sizzle 调用伪选择器时返回意外元素

支持

  • #5145:jQuery.support.opacity = false 在 Chrome 浏览器中
  • #6809:添加 jQuery.support.fixedPosition
  • #10558:测试支持错误
  • #10613:IE8 不喜欢 head 中的 detached body

Traversing

  • #10449:函数 $(“#id”).closest(“.class”) 如果它具有 .class,则返回元素 $(“#id”) 本身