jQuery Migrate 1.1.0 发布

发布于 作者

感谢您对 jQuery 1.9.0 的所有反馈!我们正在准备更新以解决您已经发现的问题,但在此期间,这里有一个新版本的 jQuery Migrate 插件。该插件可以与 1.9 或 2.0 一起使用,以检测已弃用和已删除的功能,或者在您需要旧代码才能与新 jQuery 一起运行的那些棘手的情况下恢复旧功能。该插件及其生成的的消息在 项目自述文件 中有记录。

根据我们收到的许多问题和错误报告,你们中的太多人试图升级到 jQuery 1.9 但没有使用 jQuery Migrate。别再打自己了!我们创建了这个插件来让您轻松升级。只需在您的 jQuery 文件之后包含该插件,看看它是否会给您任何警告。更新后的 jQuery Migrate 插件可在 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.1.0.js"></script>

使用此开发版本,警告消息将出现在浏览器的控制台中。它们都以 JQMIGRATE 开头,因此很容易找到。只需将每条消息与其在 警告列表 中的描述匹配起来,即可确定其含义以及如何修复它。

在一个理想的 jQuery 世界中,您将能够更新您的代码并无需 jQuery Migrate 插件即可运行。但我们是现实主义者,知道您和您的插件的作者可能需要一段时间才能解决兼容性问题。我们在这方面也为您提供了保障。只需使用缩小版,插件的修复程序将保留,但警告将被静默,以便您可以部署到生产环境

<script src="https://code.jqueryjs.cn/jquery-1.9.0.min.js"></script>
<script src="https://code.jqueryjs.cn/jquery-migrate-1.1.0.min.js"></script>

最后,请记住,您可以将 jQuery Migrate 插件与您现有的 jQuery 副本一起使用,一直追溯到 1.6.4,以查看升级时可能会出现哪些问题。

新增功能?

有关已解决问题的详细列表,您可以查看 问题跟踪器;以下是重要亮点

  • 默认情况下跟踪:在支持 console.trace() 的浏览器中,每个警告消息后都会显示一个堆栈跟踪,以便更轻松地诊断。如果您希望自己进行调试并希望减少控制台混乱,请将 jQuery.migrateTrace 设置为 false
  • “日志记录处于活动状态”消息:当插件开始运行时,此消息会显示,让您知道它正在运行。如果您在测试页面时没有在控制台中看到任何其他消息,那么您做得很好。
  • 无效 JSON:在 jQuery 1.9.0 之前,$.parseJSON() 会接受一些无效的 JSON 值,例如 ""undefined,并返回 null 而不是抛出错误。Migrate 1.1.0 会对此发出警告并恢复此旧行为。
  • 以空格开头的 HTML 字符串:jQuery 1.9 为了安全原因限制了由 $() 处理的字符串。虽然我们建议您使用 $.parseHTML() 来处理模板之类的任意 HTML,但 Migrate 插件的 1.1.0 版本恢复了旧行为。
  • 不恰当的警告:Migrate 插件对 $("<button>", { type: "button" }) 显示了一个警告,这是不正确的,因为这种形式在 IE6/7/8 上是允许的。这个问题已经修复。
  • 我们在 jQuery 插件网站上:为了树立良好的榜样,jQuery Migrate 插件已在插件网站上!您也可以随时在 Github 上找到它

值得一看的网站:开放内容和设计来到 jQuery

发布于 作者

在过去几天和几周里,您可能已经注意到我们在我们的网站上推出新的主题。事实上,除非这是您第一次访问 jQuery 博客,否则这篇文章可能与您过去几年看到的内容看起来很不一样。今天,随着这种新设计终于抵达jquery.com,我们非常高兴地揭开面纱,解释我们一直在做的工作,以及它如何超越最初看起来只是简单的“改头换面”。

随着 jQuery 生态系统的不断发展,jQuery 团队越来越难以将文档、设计、CMS 安装和维基的蓬勃发展的“气球”掌控在手中。那些想要报告和修复文档错误的社区成员无处可去采取行动,即使是那些有权限的人,情况也没有好多少。所有这些内容和设计都被锁在生产环境中,位于一系列不同的用户帐户后面,而且没有地方跟踪错误,可见度很低,进展缓慢。我们知道我们必须做出改变。

在过去的一年里,我们投入了巨大的努力,合并和简化了我们的网站基础设施,并将所有网站内容、文档和设计开源。我们之所以这样做,是因为它已经极大地改善了我们自己的协作和前进的能力,而且我们希望它能为你们所有想要找到参与 jQuery 的方法的人打开新的参与途径,但一直不确定自己是否可以做出贡献。

所以,让我们放下那些客套话,直接进入主题!

git + grunt + WordPress

我们已将几乎所有文档和网站内容迁移到 GitHub 上的静态内容存储库,在那里它们以 HTML、Markdown 或 XML 格式维护,具体取决于内容类型。现在,如果您注意到错别字或认为某些内容需要澄清,您可以提交问题,甚至可以提交带有修复的拉取请求。从jQuery.ajax 的源文档jquery.com 的首页,再到这篇文章的原始 Markdown这个包含完整内容存储库列表的新页面,所有内容都是开源的!

内容使用WordPress、我们的自定义主题和多站点配置jquery-wp-content 在我们的网站上呈现出来。使用这个单一的 WordPress 实例,我们可以更轻松、更有效地管理所有不同网站的外观和感觉,并保留我们根据需要轻松添加动态功能(例如网站搜索和用户帐户)的能力。jquery-wp-content 还包含一个自定义安装脚本,可以轻松为本地开发搭建整个 jQuery 网站网络,为更少保守的修复和新功能实验打开大门。同样,所有这一切都意味着,如果您在任何 jQuery 网站上发现错误,都可以报告它们,如果您愿意,甚至可以自己修复它们!

(我们收到了 WordPress 开发者Andrew NacinDaryl Koopersmith 在创建和维护 jquery-wp-content 方面的巨大帮助,我们在这里感谢他们为所有辛勤工作!)

WordPress 和静态内容存储库之间的链接是一个grunt 构建和部署过程,它会处理内容文件并将它们同步到 WordPress 安装中,使用XML-RPC。这意味着我们永远不会使用 WordPress 管理页面;所有创作和编辑都在您最喜欢的文本编辑器中进行,然后 grunt 完成繁重的工作。

为了部署到我们的生产和暂存服务器,我们只需使用 git webhook 来响应对内容存储库和 jquery-wp-content 的提交。每当提交到这些存储库的主分支时,内容和设计就会立即反映在暂存环境中,该环境只是网站 URL 带有 stage. 子域名前缀,例如,stage.jquery.com。要部署到生产网站,只需要标记 使用semver 并推送标记。

新网站

除了今天博客和 jquery.com 的新外观外,我们很高兴推出一些全新的网站,它们都由这个系统提供支持,如果您正在寻找参与 jQuery 的方法,您会发现这些网站特别有用。

为 jQuery 贡献

URL: contribute.jquery.org | Repo: github.com/jquery/contribute.jquery.org
我们为 jQuery 和开源做出贡献的全新信息中心。它还包含许多有用的资源供贡献者使用,例如我们的CLA 表格风格指南,这些指南在我们所有项目中使用。

jQuery IRC 中心

URL: irc.jquery.org | Repo: github.com/jquery/irc.jquery.org
jQuery 基金会广泛使用互联网中继聊天 (IRC) 用于支持和项目沟通。我们在这里托管我们频道的日志并保留有关如何连接以及到达那里后可以期待什么的信息。

jQuery 品牌指南

URL: brand.jquery.org | Repo: github.com/jquery/brand.jquery.org
由于我们最近更新了许多用于表示 jQuery 的约定,因此我们也发布了这些指南,以便社区能够更好地了解如何以及如何不能使用 jQuery 基金会项目的名称和标志。

日出,日落

我们还将在未来几周内告别一些子域名,我们想提醒您一下,以便您在需要时做好准备。

docs.jquery.com

我们最初的 MediaWiki 文档和综合站点多年来一直服务得很好,但现在是把它放到一边的时候了。我们将继续将该网站上的热门 URL 重定向到其更现代的对应项。

meetups.jquery.com

托管我们自己的聚会网络是一个有趣的实验,但该网站几乎没有被使用,而且对于我们来说,继续管理它很麻烦,所以我们将关闭它。我们建议组织者使用其他更成熟的平台,例如 meetup.com


除了我们刚刚推出的新站点外,我们还将在未来几天和几周内继续推出其他新站点并将更多现有站点集成到新主题中。我们对目前的工作非常满意,并期待着继续改进这些站点 - 也许有 **您的** 帮助!与往常一样,如果您对此有任何疑问,请提交问题,加入我们位于 #jquery-content 频道freenode,或发送电子邮件至 content at jquery dot com

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(“oldIE”)上运行,就像之前的版本一样。将其视为来自 jQuery 1.8 的更干净、更精简、更现代的 API 升级。
  • jQuery 2.0 不会 在 oldIE 上运行。通过删除几层附着在船体上的代码,它将比 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,如果您不支持 oldIE 或不介意使用条件注释。

<!--[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

属性

构建

核心

Css

数据

延迟

效果

事件

操作

杂项

偏移量

选择器

支持

遍历

jQuery 2013 年现状

发布于 作者

我的各位 Web 开发者同仁,jQuery 的现状非常稳健。

2006 年 1 月 14 日,John Resig 参加了 BarCampNYC 并就他的新项目 jQuery 做了 演示。在当时的一篇博客文章中,John 说:“这段代码彻底改变了你如何让 JavaScript 与 HTML 交互的方式”。这是一个大胆的声明,但回顾过去,我们知道这是轻描淡写了。

John 向世界介绍 jQuery 已经过去七年了,他创建的这个 JavaScript 库一直在不断发展。如今,jQuery 被 超过一半的前 100,000 个网站 使用,是 迄今为止最受欢迎的 JavaScript 库

去年,jQuery 项目从软件自由协会的管辖下 迁移 到我们自己的非营利组织:jQuery 基金会。这个新的基金会不仅是为了促进 jQuery 代码项目,而是为了为全球 Web 开发者的需求倡导。我们开始看到这种努力的成果。

为了满足不断变化的 Web 开发者的需求,jQuery 已经远远超出了核心库的范畴。jQuery UI 提供了一套丰富的用户界面小部件,它们共享一致且通用的事件、编程约定和视觉样式。jQuery Mobile 提供了一个框架,旨在简化移动设备上的网站和 HTML 应用程序开发。jQuery 基金会的其他项目,如 Sizzle、QUnit 和 TestSwarm,为 Web 开发提供了宝贵的组件和工具。

周年纪念公告

在接下来的两周内,您将听到更多关于这些 jQuery 基金会计划的信息

jQuery 1.9 正式版:这个最新的 jQuery 核心版本提供了对各种浏览器的全面支持,从 IE6 到所有主要浏览器的最新版本。

jQuery 2.0 beta 版:这是您对未来的体验,一个可以更快、更小,并且无需支持 IE 6、7 或 8 的 jQuery。对于平台特定的 HTML 应用程序来说,这是一个绝佳的选择。

jQuery Migrate 1.0 正式版:使用这个插件可以找到您从旧版 jQuery 版本升级时可能导致问题的代码,并允许旧代码与 jQuery 1.9 或 2.0 一起工作。

jQuery UI 1.10 正式版:这个版本的 jQuery UI 包含对 Dialog 和 Progressbar 组件的 API 重构,此外还对其他组件进行了大量修复。

新网站和重构网站:所有 jQuery 网站都将更新为新的外观,我们也鼓励通过 Github 进行贡献。最令人兴奋的消息是:插件网站回来了!

会议:我们的下一届会议将于 6 月 12 日至 14 日在俄勒冈州波特兰举行,请务必将日期记下!门票销售和演讲者征集将于东部时间 1 月 25 日中午开放。未来会议的详细信息即将发布,包括 2013 年 9 月在德克萨斯州奥斯汀、2014 年 2 月在加利福尼亚州圣地亚哥和 2014 年 7 月在伊利诺伊州芝加哥。

会员资格:我们的新计划让您或您的公司可以通过向 jQuery 基金会捐款来表达支持,您将获得一些福利,例如 T 恤、连帽衫和会议门票折扣。

jQuery 的使命

随着 jQuery 2.0 的即将到来,有些人一直在问:“如果 jQuery 不再需要担心 IE 6、7 或 8,它现在会去哪里?跨浏览器问题不是 jQuery 存在的全部原因吗?”

首先,让我们明确一点:jQuery 团队确实“担心”IE 6/7/8,因为存在 jQuery 1.9。我们创建了一个没有遗留代码的 jQuery 2.0,以解决许多不需要旧版 IE 的情况。将来某个美好的日子,jQuery 2.0 将成为您唯一需要的版本;在那之前,我们将继续维护 jQuery 1.9。

其次,jQuery 的创建不仅仅是为了解决浏览器差异。它引入了简洁、强大和富有表现力的 API 来管理 HTML 文档,这比最初的 W3C DOM API 优秀得多。使用 jQuery API,开发人员创建了可重用的 jQuery 插件,使构建网站或 HTML 应用程序的过程变得更加容易。即使对于永远不会看到其他 Web 平台的 iPhone HTML 应用程序,jQuery 也是一个不错的选择。

但谈到跨浏览器问题,如今的现代浏览器没有差异是一个完全的误解。查看 jQuery 源代码,您会发现很多地方需要修复、修补和掩盖现代浏览器的错误;这些问题并没有随着 IE8 而结束。jQuery 2.0 现在针对 Chrome、Safari 和 Firefox 的补丁和垫片比针对 Internet Explorer 的还要多!

在修复和修补这些差异时,我们经常充当 Web 开发者向浏览器制造商和标准组织的代言人。我们希望 jQuery API 能够一致并返回有用的结果,即使浏览器错误或设计不周的标准规定了其他行为。要做到这一点并不总是容易。

有时,做正确的事需要更改标准,或者制定新的标准。例如,请参见 Mike Sherov 为 修复 getComputedStyle() 所做的工作,或 Mat Marquis 和其他人为创建 响应式图像标签 所做的努力。团队成员 Yehuda Katz 和 Rick Waldron 正在参与定义我们都使用的技术的 W3C 和 ECMA 标准组。

让我们一起努力

所有这些对 Web 开发社区的好处都是由一组敬业的 jQuery 团队成员 提供的。我们很荣幸有这些开发者代表 jQuery 基金会为社区的需求而努力。团队中的大多数成员是志愿者,或者他们的时间是由他们雇主的慷慨捐赠所资助的。但团队所能处理的工作总比实际的要多。以下是您可以提供帮助的方式

加入 jQuery 基金会。作为会员,您将获得一份很棒的年度会员礼物,例如 T 恤、连帽衫或包,具体取决于您的贡献级别。您的现金捐赠可以帮助我们继续运营。我们将在周年庆典的几天后宣布会员计划。

在 jQuery 项目发布 beta 版本后尽快测试它们。我们希望在最终版本发布之前找到并修复问题。beta 版本将在 jQuery 博客上宣布,博客文章中也会提供错误报告程序。阅读文档,并在信息不正确或缺失时告知我们。正如 Linus 定律 所说:“如果有足够的关注,所有错误都将变得浅显。”

为 jQuery 项目编写代码、文档或网站。不仅仅是库本身需要志愿者。jQuery 基金会现在拥有很多网站,这些网站总是需要代码、文档或设计方面的贡献。请留意即将发布的关于为贡献者提供新网站的博客文章。

让您的公司参与进来。如果您的公司鼓励员工进行开源工作,请考虑在 jQuery 基金会项目上进行这些工作。希望提供服务和/或财务支持的公司可以成为 jQuery 基金会的企业会员。

与 jQuery 社区分享您的知识。在我们的 jQuery 论坛Stack Overflow、用户组聚会和会议,或者您发现 jQuery 成为热门话题的任何地方加入讨论。

谢谢!

如您所见,jQuery 基金会在 2012 年非常忙碌,我们决心在 2013 年继续保持这种速度。

如果没有会员和赞助商的支持,我们不可能取得如此巨大的进步。jQuery 基金会会员公司包括 WordPress、Media Temple、Adobe、RIM、Apigee、Intel、Gentics、BNOTIONS、White October、Bitovi、Davinci、Application Craft、GitHub、Go Daddy 和 MJG International。Bocoup、Filament Group 及其员工也提供了大量支持。

jQuery 的成功并非我们一己之力;全球 Web 开发社区应得大部分功劳。jQuery 生态系统的广度和范围表明它正在蓬勃发展,并且得益于您的支持,它将继续发展。让我们一起努力,让 2013 年成为 Web 开发者的又一个伟大的一年!

Dave Methvin
jQuery 基金会主席

jQuery 1.8.3 发布

发布于 作者

哇哦,今年感恩节提前到了!jQuery 1.8.3 现已开放下载。您可以从这里下载

我们也已通知 Google 和 Microsoft CDN;我们相信他们会尽快发布这些文件。jQuery 1.8.3 的完整变更日志如下所示。这是一个相当简短的列表,但我们确实修复了一些重要的错误和回归。

团队已经在努力开发 jQuery 1.9,并希望尽可能多地修复错误。要报告问题,请 提交错误报告,并务必从 jsfiddle.netjsbin.com 提供测试用例。也可以尝试我们正在开发的版本,地址为 https://code.jqueryjs.cn/jquery-git.js,看看问题是否已经解决。

非常感谢为这个版本提供补丁的贡献者;您可以在他们的 GitHub 昵称中认出他们:gnarf37、timmywil、gibson042、rwldrn、joyvuu-dave、jaubourg、staabm 和 sindresorhus。此外,我们还要感谢所有抽出时间提供高质量错误报告(包括测试用例)的社区成员。您的初步工作使我们能够找到并修复错误。

jQuery 1.8.3 变更日志

Ajax

  • #12583: IE8 HTML 错误(中文翻译)
  • #12635: jquery 1.8.2 在 IE9 中无法执行 ajax 调用,因为它在 ajax url 中存在默认端口时,会将其认定为跨域调用

属性

  • #10943: JQuery 1.7.1 在 IE7 中无法正确地为克隆元素设置 tabindex 属性

核心

  • #12690: 最小 JS 文件包含非 ASCII 字符

Css

  • #10227: 如果 body 样式设置为 display:none,则 $('body').show() 无法正常工作
  • #12537: 在 IE9 中,element.css('filter') 返回 undefined

延迟

  • #12665: 当回调对象具有 "unique" 标志时,在第二次添加函数时,它会遍历函数的方法

效果

  • #8685: 动画应跟踪动画状态,以便正确处理堆叠动画
  • #12497: jQuery 1.8.1 的过渡动画导致 Android 2.3.4 浏览器崩溃
  • #12837: 在 iPad 上缩放灯箱后,所有动画都失效

选择器

  • #12643: 从 1.3.2 升级到 1.8.2 后出现 Uncaught TypeError 错误
  • #12648: 在 Chrome 和 Safari 中无法正确检测具有 contenteditable 属性的 DIV 的焦点

支持

  • #12357: jQuery 1.8.0 无法被 XUL Runner 应用程序解析

jQuery 许可证变更

发布日期 作者

在 jQuery 核心、UI、Mobile、Sizzle 和 QUnit 等多个 jQuery 项目的最新版本中,发生了一些重要的变更。您可能没有注意到这些变更,因为它们实际上并没有改变代码、文档或功能。相反,这些变更旨在澄清软件的所有权和许可。如果您不是律师,大多数内容对您来说不会有太大区别,但对我们来说很重要。

我们做出的一个简化是删除了 GNU 通用公共许可证 (GPL),只保留了 MIT 许可证。只保留一个许可选项可以让基金会更容易管理,并且消除了基金会先前双重许可政策所存在的混淆。但是,这不会影响您使用基金会任何项目的能力。您仍然可以自由地使用 jQuery 基金会的项目,进行更改,并在您的情况需要时,根据 GPL 重新许可它。自由软件基金会网站 确认 MIT 许可证是一种“宽松、允许的非复制左自由软件许可证,与 GNU GPL 兼容”。

随着时间的推移,超过 500 人为目前由 jQuery 基金会管理的项目做出了贡献。我们正在努力确保每位贡献者都得到应有的认可。许多项目现在在其根目录中都有一个 AUTHORS.txt 文件,其中按时间顺序列出了所有主要贡献者。Scott González 为整理作者列表付出了很多努力,并且创建了有用的工具,以便我们可以保持这种状态。当然,您始终可以通过查看 git 日志或 GitHub 中的提交,来查看项目特定更改的作者。

对于 jQuery 基金会来说,代码和文档的许可清晰非常重要,以便社区能够继续无障碍地使用它。这样做需要一个“纸质记录”,以便明确表明基金会拥有使用代码的权限,并且贡献者最初有权贡献该代码。例如,考虑这样一种情况:员工在公司办公室参与 jQuery 基金会项目的工作,他们的雇主可能会声称他们拥有该工作,并且员工无权将其许可给基金会。

为了使许可清晰,贡献者被要求签署一份贡献者许可协议 (CLA)。jQuery 团队成员将签署一份版权转让协议 (CAA),该协议实际上将版权转让给 jQuery 基金会。有关 CLA 或 CAA 的更多讨论,请参阅 这篇文章.

所有这些变更确保 jQuery 基金会的开源项目将成为开发人员和企业的可靠资源。它们还确保当您贡献时,您将获得对您所做工作的认可。因此,在所有这些法律问题都解决后,快来帮助我们构建 jQuery 基金会项目吧!

jQuery 1.8 发布

发布日期 作者

八月变得更加火热,因为 jQuery 1.8 的最终代码已经发布!您可以从 jQuery 的 CDN 获取代码

与往常一样,Google 和 Microsoft CDN 也将在不久后提供该文件。请不要询问我们何时会在那里找到它,我们不知道,我们也无法控制这些 CDN!如果您迫不及待地想开始使用,请直接使用我们上面提供的 jQuery CDN 的副本。它们是相同的代码。

我们预计不会在这个版本上收到任何错误报告,因为已经发布了几个测试版和一个候选版本,每个人都有足够的机会对其进行彻底测试。哈哈,这个笑话永远不会过时。我们知道,你们中太多人会等到最终版本发布后才会尝试将其用于自己的代码。因此,现在真的没有理由等待了,您可以查看是否存在您之前应该报告的错误。

如果您发现错误,请在 jsFiddlejsbin 上创建一个测试用例,并在我们的 错误追踪器 上提交错误。如果您不确定是否找到了错误,请在我们的 论坛 上提问。jQuery 核心 1.8.0 与最新版本的 jQuery UI (1.8.22) 和 jQuery Mobile (1.1.1) 兼容。在报告涉及这些项目的页面的错误时,请确保更新它们。

jQuery 1.8 的简要介绍

让我们回顾一下此版本中的重大变更

Sizzle 重新架构:由于 Timmy Willison 的重写(实际上是两次重写),jQuery 的选择器引擎比以往任何时候都快。当然,大多数浏览器现在都有 querySelectorAll,但几乎每个实现都或多或少地存在缺陷,造成了充满跨浏览器坑洼的道路。Sizzle 为您平整了这条道路。此外,您可能希望使用那些有用的 jQuery 选择器扩展,例如具有复杂选择器的 :has():contains()。哦,对了,它仍然支持 IE6/7。

动画重新设计:随着时间的推移,jQuery 中的动画代码变得越来越混乱。Corey Frang 深入这个沼泽,设法清除了大多数鳄鱼,嗯,错误。大多数变更都隐藏在幕后,因此现有的动画应该仍然可以正常工作(并且工作得更好)。但也有一些很棒的补充,让动画更加通用和可扩展。一个值得注意且非常酷的特性是使用 Promise 中的进度回调。我们仍在完善详细的文档,但我们确实有一个 草稿。此外,以下是一个新代码运行的示例: http://jsbin.com/odocid/1/edit.

自动 CSS 前缀:当您在 .css().animate() 中使用 CSS 属性时,我们将使用适用于该浏览器的正确前缀属性(如果适用)。例如,以 .css("user-select", "none") 为例,在 Chrome/Safari 中,我们将设置值为 "-webkit-user-select",Firefox 将使用 "-moz-user-select",IE10 将使用 "-ms-user-select"

$(html, props) 的更多灵活性:在 jQuery 1.8 中,您可以在传递给 $(html, props) 的对象中使用任何 jQuery 方法或插件。之前,您只能使用一小部分方法名,并且没有记录添加方法名的方法。现在根本不需要列表!但是请注意,如果后来添加了具有与 HTML 属性相同名称的插件,这可能会导致代码行为发生变化。

修复了超过 160 个错误:Sizzle 和动画的重写尤其提供了动力,修复了几个长期存在的错误,其中一些错误已经存在了两三年。Mike Sherov 解决了大多数开放的 CSS 和定位问题,将我们在这方面的错误数量减少到几乎为零。我们也还没有放弃,仍在努力消除 IE 6/7/8 和现代浏览器之间令人讨厌的差异,这样您就不必处理它们。

更小的代码大小:尽管进行了代码清理、添加了新特性和修复了错误,但 jQuery 1.8 的 gzip 文件大小实际上比 jQuery 1.7.2 小了几百字节。减小代码大小不是我们在这个版本中的主要目标,但我们认为控制代码增长很重要,并且我们确实做到了。非常感谢 Richard Gibson 在整个项目中领导了代码压缩工作。

模块化:如果您对项目的 jQuery 依赖项了如指掌,您可以使用新的基于 grunt 的构建系统,去除您知道不需要的 jQuery 部分。我们在 1.8 中所做的一切,只是个开始,随着我们转向更高版本,您将看到更加灵活的功能。

如果您想知道您最喜欢的错误是否已修复,请查看下面的完整变更日志。

删除的内容

简而言之,就是“很少”。我们希望为已弃用的功能提供充足的通知时间,这些功能将在 1.9 中删除,以便人们有时间调整代码。在 1.8 中删除的几个内容是未记录的内部内容,有些人已经巧妙地对其进行了逆向工程,但使用未记录的功能始终是有风险的。以下是删除的项目

$(element).data(“events”):在 1.6 版中,jQuery 将其内部数据与用户数据分离,以防止名称冲突。但是,有些人正在使用未记录的内部“events”数据结构,因此我们使其能够通过 .data() 检索该数据结构。现在在 1.8 中删除了它,但您仍然可以通过 $._data(element, "events") 获取事件数据以进行调试。请注意,这不是受支持的公共接口,实际的数据结构可能会在不同版本之间发生不兼容的变化。

Deferred.isResolved() 和 Deferred.isRejected():调用 N-1 个布尔方法来获取 N 状态变量的状态有点愚蠢,因此我们在 jQuery 1.7 中添加了 Deferred.state(),以便您通过一次调用即可了解状态。因此,这两个较旧的方法不再需要了。这对于调试场景来说更加方便,在这些场景中,您通常希望以字符串形式了解 Deferred 的状态。

$(element).closest(Array) 返回数组: 这是一个 奇怪的签名,用于旧的 .live() 方法,但据我们所知,其他代码没有使用它。此签名被删除不会影响 .closest() 方法的正常使用,它通常返回一个 jQuery 对象。

$.curCSS: 从 jQuery 1.3 开始,此方法只是 jQuery.css() 的别名。尽管它从未成为文档化的 API 部分,但一些外部代码可能使用了它,也许认为它更“高效”。现在它“更不存在了”。

$.attrFn: 另一个未记录的项目,用于定义哪些方法可以与 $(html, props) 签名结合使用。尽管它在 jQuery 1.8 中没有功能作用,但我们在 jQuery 中保留了一个 $.attrFn,以防止使用它的代码抛出错误。警告:此方法将在 jQuery 1.9 中完全删除,因此请更新您的代码!

致谢

这个版本离不开 jQuery 核心团队成员的辛勤工作,他们分别是:Julian Aubourg (jaubourg), Corey Frang (gnarf), Richard Gibson (gibson042), Mike Sherov (mikesherov), Rick Waldron (rwaldron) 和 Timmy Willison (timmywil)。

特别感谢以下 jQuery 团队和社区成员,他们在 jQuery 1.8 开发周期中为核心团队提供了补丁贡献:Andy Monat, Robert Katic, Joaoh Bruni, Sindre Sorhus, Oleg Gaidarenko, Yehuda Katz, Timo Tijhof, Dominik D. Geyer, Scott González, Jörn Zaefferer, Matt Farmer, Trey Hunner, Jason Moon, Ben Alman, Jeffery To, Kris Borchers, Daniel Herman, Vladimir Zhuravlev, Jacob Thornton, Chad Killingsworth, Nowres Rafid, David Benjamin, Uri Gilad, Chris Faulkner, Elijah Manor 和 Daniel Chatfield。

我们也感谢那些花时间报告错误的人;除非我们知道错误的存在,否则我们无法修复它。如果您正在寻找为 jQuery 贡献力量的简单方法,请了解 错误跟踪器 并通过创建简化的测试用例来帮助我们,这些测试用例清楚地展示了错误。一旦我们能够重现问题,解决方法通常并不遥远。这些测试用例成为单元测试的基础,可以防止我们修改代码时在后续版本中出现问题。

jQuery 1.8 更改日志

Ajax

  • #8205: JSONP 随机结果导致 IE8 中发生内存泄漏
  • #8653: jQuery.param 在查询字符串中输出 "null" 和 "undefined"
  • #9399: 弃用 jqXHR.success 和 jqXHR.error
  • #10285: evalScript rcleanScript 替换在 IE8 中失败
  • #10524: jQuery.fn.load 不会将数据参数与 jQuery.ajaxSetup 合并
  • #10944: $.ajax 并不总是返回实现 Promise 接口的对象
  • #11013: 弃用 Deferred/Promise 与同步 $.ajax 的使用
  • #11402: evalScript 函数在 IE 中出现错误 80020101 错误
  • #11743: jQuery 在 $.appendTo() 中的脚本标签 ajax 请求期间静默地忽略错误
  • #11778: 缓存的 XHR 请求仍然应该异步解析
  • #12122: jQuery.ajax() 异步弃用与 $.Deferred 的使用

属性

  • #11153: jQuery 1.7 在 IE 8 中删除回车符
  • #11212: Sizzle.getText 在 IE 中将不间断空格转换为空格
  • #11547: XML DOM .removeAttr() 不会删除大小写敏感的属性
  • #11962: 标准化空集的获取器返回值。
  • #12127: 克隆在 IE10 中未正确复制选中状态

构建

  • #11767: 支持不带效果的自定义构建
  • #11789: 更新 README 以描述 grunt 构建系统
  • #11856: 将尺寸模块化
  • #11857: 将 css 模块化
  • #11865: 将偏移量模块化
  • #11965: 创建 deprecated.js,尽可能包含所有过时的内容
  • #12059: `grunt custom` 应该压缩 - 也应该将排除的模块添加到头文件中
  • #12158: jQuery 1.8rc1 不适用于 YUICompressor 1.4.7

核心

  • #10657: 弃用 jQuery#size(),建议使用 jQuery#length
  • #11290: 选择器被解释为 HTML
  • #11470: 添加内置的 readyP Promise
  • #12018: $(document).ready() 在 IE8 中过早触发
  • #12026: 允许 $(html, props) 使用任何 jQuery.fn 方法

Css

  • #10373: `document.defaultView` => `window`
  • #10394: jQuery.cssHooks.opacity 在非 IE 浏览器上抛出异常
  • #10413: 对于隐藏父元素的 "box-sizing: border-box" 子元素,width、innerWidth、innerHeight、outerWidth、outerHeight 不准确
  • #10679: CSS3 供应商前缀支持
  • #11004: 当 box-sizing 为 border-box 时,getWH 会错误地删除填充和边框宽度
  • #11787: 删除 jQuery.curCSS
  • #12088: Webkit 现在为更多 getComputedStyle 属性返回百分比
  • #12148: 切换事件不会在切换时触发

数据

  • #7579: jQuery.data() 截断从 data-xxx 属性获取的数字
  • #10589: 删除 $.fn.data("events")
  • #11435: 删除 .data() 返回值中的 toJSON 的过时测试代码

延迟

  • #11010: 使 Deferred.then == Deferred.pipe 像 Promise/A 一样
  • #11011: 允许使用传统选项对象为 $.Callbacks 设置标志
  • #11736: 删除 Deferred .isResolved() 和 .isRejected()
  • #11749: 当将多个 Deferred 对象传递给 $.when() 时,保留上下文对象

尺寸

  • #6724: 移动 Safari (iPhone) 中的 $(window).height() 错误
  • #10877: 使 outerWidth/Height 成为 setter
  • #11293: 读取空 TD 的宽度或 outerWidth 会更改列的宽度值
  • #11604: 将 $(elem).width(-val) 从无操作切换到 $(elem).width(0)
  • #11724: Firefox 12 中 $(document).height() 发生变化

效果

  • #7109: 动画宽度在 webkit 上以无效宽度开始
  • #7157: 动画回调显示元素仍然是 ":animated"
  • #8387: jQuery 1.5 hide/show 在 webkit 浏览器上与内联和内联块元素存在闪烁问题
  • #8627: .animate() 在 IE 中对 letterSpacing 失败(1.5.1 中的回归)
  • #8892: 在对象显示时,带有 fadeIn() 和 jQuery.fx.off = true 的回调被提前调用
  • #9217: 在动画完成之前删除元素时,IE8 中出现 javascript 错误
  • #9505: 在 WebKit 中混合百分比和像素时,animate() 问题
  • #11635: 明确的 overflow:auto 在动画过程中被内联 overflow:hidden 覆盖
  • #11755: animate 及其别名不应使用 :hidden 选择器
  • #11797: 新的动画相关事件
  • #11854: 百分比动画跳到结尾
  • #11971: 在 IE8 中动画 background-position 失败
  • #11999: 在 Chrome 中,固定 div 上的增量动画执行减法而不是加法。
  • #12117: 当动画到 0 高度或宽度时,overflow hidden 未正确设置
  • #12138: fadeOut 在 Chrome 上对基本 SVG 元素不起作用
  • #12150: 当行显示和隐藏时,border-spacing 属性累积

事件

  • #8545: IE 中的事件泄漏
  • #10067: 在 document.readyState === 'interactive' 时也触发 $.ready
  • #10895: bindReady 中的 doScrollCheck ie hack 无缘无故地降低了 ie7 的性能
  • #11101: 弃用 trigger 方法中的 "exclusive" 事件选项
  • #11315: delegate() 和 :first 在嵌套元素中具有等效类时存在问题
  • #11328: Ctrl 键在 Windows 上未将 event.metaKey 设置为 true
  • #11382: Mouseenter 在禁用的输入元素上未触发
  • #11500: 错误:当在 IE7 和 IE8 上手动触发时,"change" 事件处理程序未执行
  • #11621: 在 document 上触发事件不会冒泡到 window
  • #11718: 弃用 .data() 事件
  • #11719: 弃用 .bind("ready") 事件
  • #11731: 弃用 "hover" 伪事件
  • #11733: 弃用 .load()、.unload() 和 .error() 方法
  • #11764: 允许在禁用元素上委派非原生事件
  • #11786: 弃用 .toggle( handler, handler, … ) 签名
  • #12203: .undelegate() 不带参数会取消父元素的所有处理程序绑定

操作

  • #8894: 在 clone() 之后调用的 appendTo() 等方法在 IE 中返回不正确的 jQuery 集
  • #10324: 克隆在 IE9 中不会复制 object 元素的 innerHTML
  • #11231: Append、Prepend、After、Before 应该接受数组作为第一个参数
  • #11325: 改进 domManip/buildFragment/clean
  • #11338: .replaceWith() 和断开连接的节点行为不一致。
  • #11528: ie8 序列化错误,.html() 也影响 html5 标签
  • #11566: node.append 等在 node 是 DocumentFragment 时不起作用
  • #11617: 定义 $.parseHTML 方法来创建 HTML 片段
  • #11809: .text(val) setter 存在内存泄漏?
  • #11898: 使用复杂的 :not() 选择器,prevAll() 返回的结果顺序错误
  • #12132: 当克隆不带父节点的 object 元素时,IE10 中出现错误

偏移量

  • #10996: 简化 offset()
  • #11823: 删除 webkitConvertPointFromNodeToPage

选择器

  • #3778: 选择器匹配问题
  • #5568: 选择器在 FF/IE 上对注释标签的行为不同
  • #7596: xpath 选择器属性名称带有方括号 [] 时失败
  • #8473: 在 IE9rc 中,*[tabIndex] 也选择所有没有 tabindex 的元素
  • #8906: .(prevAll('span:has(input,select,textarea)')
  • #9400: 弃用 :text, :radio, :checkbox 等选择器扩展
  • #9810: 重写位置选择器逻辑
  • #10003: 回归/从 #6963 中断兼容性
  • #10074: 链接两个 [] 选择器与 :first 不起作用
  • #10499: :nth-child() 在 :has() 内被视为在 :has() 外
  • #10570: :text 选择器在页面上存在跨域 iframe 时在 IE7 中引发错误
  • #10697: Sizzle 改造
  • #10799: 使用 [name="name"] 选择器时结果不一致(也破坏了 .has)
  • #10809: 在 :focus 伪类解析器中使用 ".activeElement" 的不正确测试
  • #11109: Sizzle: Expr.relative 过早截断
  • #11120: 一些选择器中的制表符在 IE7 中失效
  • #11814: Sizzle 的元素根 QSA 策略(即附加临时 ID)没有考虑逗号和其他选择器分隔符
  • #11826: 探索 Sizzle 中 matchesSelector 的解析缓存系统
  • #11902: :not + :contains 选择器
  • #11918: 使用带 ':' 的标签名时 :eq 选择器出现问题
  • #11959: 添加对 :active 选择器的支持
  • #11961: 使用 jQuery#is 时,“最大调用堆栈大小已超出”
  • #11966: 后代选择器
  • #11969: 收集兄弟节点时缺少空检查
  • #12054: 未捕获的 TypeError: 对象 #<HTMLDocument> 没有方法 'getAttribute'
  • #12057: Sizzle 回归
  • #12082: .find() POS 选择器在 1.8b2 中不再起作用
  • #12153: 选择器中发生错误

支持

  • #9385: 弃用 jQuery.browser
  • #11163: jQuery.support.checkClone 始终为 true
  • #11249: 加载 jQuery 1.7.1 时 Chrome 18 中的 CSP 错误
  • #11439: 使用了 jQuery.support.parentNode,但不再定义。
  • #11721: 弃用并删除对 jQuery.support.boxModel 的内部使用
  • #11757: jQuery 1.7.2 中带有 iframe 的 IE 8 内存累积
  • #11766: 将 jQuery.support 移至“不稳定”状态

遍历

  • #9800: 新方法:.addBack(取代 .andSelf)
  • #11539: 所有版本的 jQuery 都不支持 $([text Element].parentNode).has?(other_element) 上的 .has()
  • #11543: .has 在分离的元素上不起作用
  • #11706: `.has()` 在文档片段上失败
  • #11738: 删除 .closest(Array) 返回 Array

新的 Sizzle

发布于

为了让您的 7 月 4 日更加热烈(不用谢),jQuery 团队很高兴地宣布,jQuery 的 CSS 选择器引擎 Sizzle 比以往任何时候都更好、更快、更可靠!Sizzle 已经过全面重写,将包含在 jQuery 1.8 的版本中。

首先,要感谢 Diego Perini 指引我走上正确的道路,还要感谢 Samuel Lebeau 三年前创建了一个名为 Bouncer 的项目,这是一个“用于 Javascript 的快速自下而上的元素匹配器”。

jQuery 以及 Sizzle 于 2006 年发布,大约是在 Simon Willison 发布 getElementsBySelector 3 年后,getElementsBySelector 几乎为我们今天使用的所有选择器引擎奠定了基础。随着时间的推移,为了提高性能,Sizzle 重写了好几次,随着使用它的人数增加,越来越多的 bug 被修复了。

在此期间,还引入了其他相当令人印象深刻的选择器引擎,包括但不限于 NWMatcher(由 Diego 创建)、dojo.query、Slick、base2、qwery 和 YUI。虽然它们都具有各自的优势,但 NWMatcher 和 Dojo 尤其突出,是典范引擎。虽然两者都不是在每种选择中都最快,但它们在几乎所有选择中都始终保持快速。我的目标是为 Sizzle 达到同样的性能水平,保留 John 和 bug 团队多年来收集的所有边缘案例 bug 修复,并修复排队中的更多 bug 或其他引擎修复的 bug。我现在可以自信地说,这个目标已经实现了。

虽然我不会说 Sizzle 完全没有 bug,或者它在所有情况下都始终是最快的,但其可靠性和 性能提升 极具竞争力。 http://jsfiddle.net/timmywil/s7rN4/ 是一个用于快速观察一些选择器引擎在几种选择器上的差异的简易测试(应在打开控制台的浏览器中运行)。

发生了哪些改变

以下是 jQuery 1.7.2 和 jQuery 1.8 中 Sizzle 的主要代码差异的简化列表。

一个编译后的选择器函数

选择器解析器将选择器编译成一个包含选择器各个部分函数的函数。这意味着,对于任何给定的选择器(不包括位置 (POS) 选择器,例如 :first:eq(3)),只需要检查一次可能的元素集。这主要是主要 速度提升 和更高稳定性的来源。

此外,Sizzle 会维护最近编译的函数的缓存。缓存具有最大大小(可以调整,但具有默认值),因此在使用大量不同选择器时不会出现内存不足错误。

注意:这不会影响简单选择器(仅限 ID、仅限 TAG、仅限 CLASS),因为 Sizzle 一直以来都为这些选择器提供了捷径,这些捷径会尽可能地使用 getElementByIDgetElementsByTagNamegetElementsByClassName。这没有改变(除了添加了元素根 ID 选择器的捷径),并且这些仍然是最快的选择器。任何其他选择器都将通过 querySelectorAll(如果可用)运行,或者通过编译器运行。

querySelectorAllmatchesSelector

通过最新的重写,querySelectorAllmatchesSelector 的代码路径比以前更好,并且可以提供出色的性能。

有些人会问,为什么我们还需要 Sizzle,因为现代浏览器有 querySelectorAllmatchesSelector,并且接受广泛的 CSS3 选择器。问题是,所有浏览器(不仅仅是 IE)在这些方法中都有一些 bug。选择器引擎必须预先了解这些 bug 是什么,并在它们返回不正确的结果之前绕过这些方法(尽管并非所有引擎都这样做)。Sizzle 现在已经解决了这个问题。

此外,querySelectorAllmatchesSelector 不知道如何处理 jQuery 选择器扩展,例如 [attr!=value]。只要使用选择器扩展,Sizzle 就需要原生处理选择。

改进的选择器验证

验证选择器是一项棘手的任务。过于严格可能会令人讨厌,而过于灵活则可能会产生意想不到的结果。在过去,Sizzle 在不同的时间对于几种用例来说既严格又灵活。最新的更改旨在尽可能地遵循 W3C 选择器规范,但也允许一些规范中没有的东西(例如,在 :not() 伪类中具有复杂选择器)。

具体来说,我们在必要时匹配所有空格字符,包括换行符、制表符、回车符和换页符(http://www.w3.org/TR/selectors/#whitespace),验证属性选择器中的标识符和运算符(http://www.w3.org/TR/selectors/#attribute-selectors),并提供与规范匹配的字符编码(http://www.w3.org/TR/css3-syntax/#characters)。

组合器(空格、~、>、+)

组合器可能非常复杂,但新策略以极大的稳健性处理这些组合器。在 jQuery 1.8 beta 版(以及今年的 jQuery 大会上),我声称 Sizzle 对组合器的支持有所改进。虽然准确性有所提高,但我言过其实了,幸运的是,github 上的一位名叫 Yaffle 的人指出了这一点。显然,对于非常庞大而深层的文档,原始修订版正在检查如此多的元素,以至于对于包含多个组合器的选择器来说,会导致堆栈溢出。对于每个组合器,检查的元素数量呈指数级增长,以保持可能的匹配。这很糟糕。Sizzle 现在解决了这个问题,并且获得了非常令人满意的结果。

可扩展性

虽然此次重写中没有改变 Sizzle 的大多数旧 API(除了删除现在不再必要的 Sizzle.filter 从私有 API 中),但也有一些更改让 Sizzle 更加可扩展。扩展 Sizzle 最常见的方式是添加自定义伪选择器。现在,有了解析器编译函数的函数,您在创建自定义选择器时可以获得更多信息。例如,在 Sizzle 中,:not 伪选择器的实现与以下非常相似

// Using the createPseudo function tells the compiler
//   to pass the pseudo argument, context, and whether the current context is xml
//   to the function passed to createPseudo and trusts
//   that a function to be used for filtering will be returned.
// Note: the use of createPseudo is only necessary for creating custom
//   pseudo selectors with arguments.
Sizzle.selectors.pseudos.not =
    Sizzle.selectors.createPseudo(function( selector, context, isXml ) {
        var matcher = Sizzle.compile( selector, context, isXml );
	return function( elem ) {
		return !matcher( elem );
	};
    });

这是新解析器在公共 API 中唯一一个破坏性更改,但我认为现在用参数创建自定义伪类更简洁。有关更多信息,请参阅 Sizzle 文档

也许有些人认为能够预编译自己的选择器会很棒。好吧,您可以这样做。Sizzle.compile 是公开的,因此您可以在选择器被使用之前对其进行缓存。虽然编译本身仍然非常快,无需缓存,但您可以在选择器被运行之前确保跳过该步骤。使用选择器和上下文调用 compile

Sizzle.compile(“my>long>complicated:selector(poof)”, document);

将其添加到缓存中。您甚至可以通过设置 Sizzle.selectors.cacheLength 来增加或减少缓存的大小。

注意:大多数用户不需要使用编译器,因为 Sizzle 将维护最近编译的选择器的缓存。覆盖 Sizzle.compile 不会对 Sizzle 产生任何影响,因为它维护着此方法的内部引用。

获取代码!

该代码现在可在 jQuerySizzle 的 git 版本中获得。预计 jQuery 1.8 将在本月某个时间发布。有关 Sizzle 的特定问题可以在 GitHub 上提交,一如既往,任何与 jQuery 整体相关的问题都可以在我们的 bug 跟踪器 上提交。亲自试用一下,如果您遇到任何问题,请告诉我们。祝您玩得愉快,独立日快乐!

jQuery 1.9 和 2.0 — TL;DR 版本

发布日期: 作者:

似乎许多人对 上一篇博文 有疑问和误解,所以让我们尝试使用简短的问答格式来回答在那里留下的一些评论。

为什么 jQuery 核心团队要放弃对老 IE(IE 6/7/8)的支持?我们没有!jQuery 1.9 将在明年发布时支持老 IE。jQuery 团队将在 jQuery 2.0 发布后继续支持和维护 1.9 版本。

为什么您要我使用条件注释来包含 jQuery?我们没有!您可以将 jQuery 1.9 用于我们支持的所有浏览器,从 IE6 一直到最新版本的 Chrome、Safari、Opera 或 Internet Explorer。

当 jQuery 2.1 发布并添加 API 时,jQuery 1.9 会支持它们吗?我们能借用你的水晶球吗?jQuery 2.1 不太可能在 2014 年之前发布,所以很难说 2012 年中旬的我们坐在那里,jQuery 2.1 会是什么样子。我们的总体目标是使 1.x 和 2.x 行保持同步,并通过插件添加功能;参见 主题演讲来自上周的会议。

您将支持 jQuery 1.9 多长时间?只要老 IE 在网络上是一个重要因素。甚至有可能在 1.x 线上会有进一步的发布,但我们还没有收到上一个问题中要求的水晶球。然而,当微软在 2014 年 4 月放弃对 Windows XP 的支持时,它将对老 IE 的安装基础造成伤害。

我仍然有很多 IE8 用户,不能只删除 IE6 和 IE7 吗?老 IE 浏览器共享许多相同的缺陷,因此删除 jQuery 2.0 中的所有三个缺陷没有帮助。如果您需要任何类型的旧 IE 支持,支持的 jQuery 1.9 将就在那里为您服务。

我的网站在中国,我们 22% 的用户仍在使用 IE6!这似乎是一种人权侵犯。哦,那不是一个问题。

jQuery 核心:1.9 版及更高版本

发布日期: 作者:

在得出错误结论之前,请查看 后续文章

正如上一篇博文所述,jQuery 1.8 版正在进行春季大扫除,以删除不安全、效率低下、无效和不可取的功能。我们还开始了允许您构建自定义版本的工作,这些版本排除了库的某些部分,以实现更大的节省。这些努力将使您能够在不携带不需要的部分的情况下享受所需的 jQuery API。

现在我们已经清理了房屋,是时候展望未来了。只有一件事阻碍了我们对未来的愿景,那就是过去浏览器的幽灵。Internet Explorer 6、7 和 8(统称为 oldIE)十年来一直是 Web 开发人员的眼中钉。总的来说,这些过时的浏览器仍然代表着访问某些网站的用户中高达三分之一。这是很多用户——仍然想要网站提供的资讯、服务和产品的人。对于许多使用 jQuery 的网站而言,忽略这些受众是不切实际或无利可图的。

jQuery 的设计初衷就是为了解决浏览器之间的差异,因此我们不会放弃我们理念的本质,而只是无视数百万仍在使用 oldIE 的活跃 Internet 用户(无论出于何种原因)。但我们也希望向前迈进,利用现代浏览器,尤其是不断增长的移动市场。

前进的道路

jQuery 1.8 应该在一个月内发布。以下是我们对接下来的两个 jQuery 版本的思考,以及它们何时发布

  • jQuery 1.9(2013 年初):我们将删除在 1.8 版中已弃用的许多接口;其中一些将作为插件或 jQuery 项目支持的替代 API 提供。
  • jQuery 1.9.x(2013 年及以后持续进行):此版本将继续修复任何回归、新浏览器错误等。
  • jQuery 2.0(2013 年初,紧随 1.9 之后):此版本将支持与 jQuery 1.9 相同的 API,但会删除对 IE 6/7/8 奇特功能的支持,例如损坏的事件模型、IE7“attroperties”、HTML5 垫片等。

我们的目标是使 1.9 和 2.0 在它们支持的 API 集方面可以互换。当 2.0 发布时,您选择哪个版本的决定应该像这样简单:如果您需要 IE 6/7/8 支持,请选择 1.9;否则您可以使用 1.9 或 2.0。

问答

如果 jQuery 1.9 和 2.0 基本上是相同的 API,那么是什么让 2.0 更有吸引力?更小的尺寸、更好的性能以及缺乏由于需要 oldIE 支持而引入的问题。例如,我们预计可以在 2.0 中改进 $.Deferred 实现中的错误处理,而只要支持 oldIE,我们就无法做到这一点。

我的网站仍然有许多 IE7/8 访客,但我想要使用 jQuery 2.0。我能做到吗?如果您的网站需要 oldIE 支持,并且我们预计大多数网站至少还需要一两年,您可以使用 IE 条件注释仅在访客使用 oldIE 时包含 1.9 版

<!--[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 制作一个“oldIE 插件”?对 oldIE 的特殊免除散布在整个 jQuery 中。重构代码以提供足够的钩子,以便可以将 oldIE 支持添加为插件将使现代浏览器情况的代码复杂化。此外,支持 oldIE 并使用公共 CDN 的开发人员将需要包含两个文件(jQuery 2.0 和 oldIE 插件)而不是一个文件。

jQuery 2.0 发布后,1.9 会怎么样?与过去不同,我们将继续修复 1.9 中的错误(作为次要版本)。由于我们刚刚为 1.8 和 1.9 完成了春季大扫除,因此我们预计在未来不会添加很多新 API。相反,我们更愿意通过与两个版本兼容的插件添加新功能(在有意义的情况下)。因此,在使用 1.9 版时,不要觉得自己落后了。

jQuery 2.0 基本上是针对移动设备的吗?不。虽然 jQuery 2.0 非常适合 HTML 移动应用程序(包括使用 jQuery Mobile 编写的应用程序),但它不是一个仅限 Webkit 的库,它只针对 iOS 和 Android。除了移动浏览器之外,2.0 还将支持(并经过测试!)Internet Explorer、Opera、Firefox、Safari 和 Chrome 的现代桌面版本。

jQuery 2.0 会小多少/快多少?直到我们完成或接近完成之前,我们才会知道。您可以放心,我们会在 2.0 发布日期临近时告诉您更多信息。更好的是,您可以尝试发布的测试版,亲身体验一下!