jQuery 1.8.2 发布

发布日期: 作者:

我们很高兴地宣布 jQuery 1.8.2 已发布!此版本修复了在过去几个版本中报告的几个错误和性能回归,我们认为 1.8 版本在此阶段非常稳定。要确保它与你的代码兼容,唯一的办法就是测试它,所以请务必测试!

与往常一样,我们已经发布了 jQuery 形状的信号灯;Google 和 Microsoft CDN 的主控中心已处于高度戒备状态,并将很快发布这些文件。如需立即缓解,请使用上面的副本。如果你发现问题,请发布错误报告,并确保包含来自jsfiddle.netjsbin.com的测试用例。

jQuery 1.8.2 的完整变更日志如下。如果这是你第一次升级到 1.8 版本,请务必阅读1.8.01.8.1的博文,以了解发生了哪些变化。

感谢为这个版本提供补丁的贡献者;你们可以通过他们的 GitHub 句柄来认识他们:timmywil、gibson042、rwldrn、joyvuu-dave、jaubourg、staabm 和 sindresorhus。此外,我们感谢所有花时间提供带测试用例的优质错误报告的社区成员。你的初步工作使我们能够找到并修复错误。

jQuery 1.8.2 变更日志

Deferred

  • #12521: Deferred.promise( target) 仅当 typeof( target)=='object' 时才能正常工作

Event

  • #12423: jQuery 在 IE7+ 上使用 Comcast Protection Guard 和任何反键盘记录保护软件时出现故障
  • #12436: 使用委托事件和伪类导致性能下降

Misc

  • #12229: 一些不一致之处/优化

Offset

  • #12534: .offset() 在 BlackBerry5 和 iOS3 上抛出错误
  • #12536: 使 .offset() 计算在没有 getBoundingClientRect 的浏览器上更准确

Selector

  • #12303: 属性选择器在属性值包含 :first :last 时失败
  • #12337: :nth-child 选择器在添加新子元素后不准确
  • #12361: 选择器存在错误
  • #12448: :contains() 边缘情况抛出错误
  • #12492: 在 textarea 的焦点事件处理程序中,$(this).is(':focus') == false 在 Chrome & Safari 中
  • #12523: JQuery 将换行符呈现为文本节点
  • #12526: :last 选择器无法找到匹配项
  • #12541: 1.8.0 和 1.8.1:双 :not() 选择器在 IE6/7 中失败
  • #12572: :contains 在搜索 iframe 时中断 v1.8

Traversing

  • #12474: 在使用 append 的集合上使用 find 不会返回正确的元素

jQuery UK 2013

发布日期: 作者:

jQuery UK 2013 年回归!

jQuery 基金会很高兴地宣布,White October 将于 2013 年 4 月 19 日在英国牛津举办另一场jQuery UK 会议。

现已开放征稿,并欢迎演讲者建议。因此,如果你想参与其中,或者想在jQuery UK 上看到某人,你就知道该怎么做。

在征稿截止日期 10 月 11 日之前,少量门票以“盲鸟”价格 £130 + 增值税出售。

完整的演讲者阵容将在 2012 年冬季公布,早鸟票将同时以 £160 + 增值税的价格出售。

我们也将其列在了Lanyrd.com上,如果你想在那里关注,可以这样做!

jQuery 许可变更

发布日期: 作者:

在几个 jQuery 项目的最新版本中,如核心、UI、Mobile、Sizzle 和 QUnit,都进行了一些重要的更改。你可能没有注意到它们,因为它们并没有真正改变代码、文档或功能。相反,这些更改旨在澄清软件的所有权和许可。如果你不是律师,这些对你来说意义不大,但对我们来说很重要。

我们做出的一个简化是删除了 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 基金会项目!

帮助我们把 UglifyJS 2.0 变成“有钱的”

发布日期: 作者:

在自然界中,生态系统由生物体、原材料以及塑造它们共享环境的所有复杂相互作用组成。开源生态系统也不例外。每个项目都有自己的利基,任何作为依赖项的包当然也有自己的依赖项。jQuery 被用于数百万个网站,但没有我们所依赖的用于构建、测试和分发代码的优秀工具,我们就无法做到这一点。

其中一个工具是Mihai Bazon 的 优秀的UglifyJS。我们已经使用 Uglify 来压缩 jQuery、jQuery UI 和 jQuery Mobile 几乎两年了,所以如果你最近使用过我们任何压缩的构建版本,你就已经从 Mihai 的工作中受益了。最近,他开始着手开发UglifyJS 2.0,该版本将提供更强大的压缩功能,支持源代码映射,以及一个命令行实用程序。他还宣布了一项Pledgie 活动来支持他的工作。

基金会,我们的目标不仅仅是改进以“jQuery”开头的库,而是要改进我们所有人都参与其中的整个 JavaScript 生态系统。因此,我们今天很高兴地宣布一些令人兴奋的消息,并提出一个挑战!

帮助构建 UglifyJS 2.0!
Click here to lend your support to: Funding development of UglifyJS 2.0 and make a donation at www.pledgie.com !

我们刚刚向活动捐款 500 欧元,以表彰他迄今为止的工作,但我们所有人都可以做更多。如果社区能够帮助我们帮助 Mihai 在 9 月底之前实现 3,000 欧元的目标,我们将向 UglifyJS 2.0 项目额外捐款 500 欧元!

我们期待着继续向您通报这里取得的进展,并在将来参与类似的努力,以帮助改进我们每天使用的工具。在此期间,感谢您考虑捐款(即使是少量捐款),如果我们还没有说服您,也许这个最后的号召会说服您:想想那些字节!

更新(5:30):太棒了!Dojo 基金会已经匹配了我们的捐款

jQuery 开发者峰会 2012

发布日期: 作者:

在过去八个月中,我们在基金会一直在努力扩大活动的影响范围和广度,我们很高兴今天宣布首次举办jQuery 开发者峰会,将于2012 年 10 月 15 日和 16 日弗吉尼亚州杜勒斯的 AOL 校园举行。

开发者峰会将与我们传统的活动有所不同。我们将不再进行为期两天的演讲和幻灯片演示,而是花一个上午时间向您介绍 jQuery 的工作原理,从 jQuery 核心内部机制到我们如何构建和测试库,再到我们如何管理我们的网站。然后,我们将分成团队,花剩余时间一起协作完成我们每天都在使用的项目和工具。

由于这是一个更加私密的活动(并且这是我们第一次尝试),我们只能容纳大约150 人。为了在会议室中获得合适的技能和经验组合,这将不是简单的先到先得。相反,我们将从 8 月 31 日到 9 月 7 日滚动接受和审查提交给此申请的申请。换句话说,我们要覆盖很多不同的领域,所以我们不能让 100 个人来参加,而他们只是想要修复怪癖模式下的边缘情况错误!

重点在于协作、作为开源开发者成长,以及享受乐趣!如果您觉得这很合您的口味,立即详细了解开发者峰会,并考虑申请!当然,如果您有任何问题,请随时咨询

jQuery 1.8.1 发布

发布日期: 作者:

过去几周非常忙碌但富有成效,jQuery 核心团队很高兴宣布 jQuery 1.8.1 发布!此版本修复了社区在 1.8.0 最终版本发布后报告的问题。以下是您可以使用的文件:

Google 和 Microsoft 的 CDN 很快也将提供副本。

下面列出了修复的最后一些错误。别忘了,大家,我们喜欢在测试版和候选版本中听到关于错误的信息!您无需等到最终版本发布才能用您的代码进行测试。我们越早修复这些错误,团队和 jQuery 社区的工作就会越顺利。

使用 jQuery UI 1.8.23 和 jQuery Mobile 1.1.1 或更高版本以确保与 jQuery 核心 1.8.1 的最佳兼容性。

不要使用怪癖模式jQuery 从未支持怪癖模式,我们也不在怪癖模式下进行任何测试。这可能会影响像$("window").height()这样的值,并且 jQuery 1.8 的怪癖模式结果发生了变化,以便支持一些现代浏览器功能。我们看到的大多数问题都是由希望使用标准模式但其文档类型无效或其<html>标记之前存在多余标记的开发者造成的。如有疑问,请使用简单简短的<!doctype html>

Sizzle 的带参数的自定义伪选择器已更改,但 jQuery 1.8.1 为旧代码提供了一个兼容性垫片。Sizzle 和 jQuery 都没有在以前记录这些是如何工作的;现在有Sizzle 的官方文档。在那里查找有关编写适用于所有 jQuery 版本的自定义伪选择器的最佳实践示例。

衷心感谢团队和社区成员为本次发布贡献补丁:Timmy Willison、Mike Sherov、Elijah Manor、Mike Pennisi、Richard Gibson、Corey Frang、Mathias Bynens、Oleg Gaidarenko、Nikita Govorov、Julian Aubourg 和 Rick Waldron。

我们也非常感谢那些花时间为 jQuery 1.8.1 创建良好的错误报告的人。如果我们设法在这个版本中留下了任何错误,请务必告诉我们。首先检查错误跟踪器,看看它是否已经报告过了。如果没有,请使用jsFiddle.netjsbin.com创建一个测试用例,其中包含展示问题的最少代码。

jQuery 1.8.1 更改日志

Ajax

  • #12233:jQuery.post() 抛出“RangeError: Maximum call stack size exceeded”
  • #12234:.load() 方法,当 params 为 null 时,ajax 类型将为“POST”,而不是“GET”

核心

  • #12282:1.8.0 回归 - 文档就绪在 IE 9/10 上过早触发
  • #12329:event.js 仍然包含对 bindReady 的引用
  • #12350:jQuery.trim 应该删除字节顺序标记 (BOM) 字符
  • #12370:jquery android 2.1-update1 问题

Css

  • #12235:getComputedStyle 在没有命名空间的情况下使用
  • #12313:.height() 和 .width() 不再在 offsetWidth 未定义的情况下回退到 CSS。
  • #12324:cssNormalTransform 会产生错误的值

数据

  • #10863:如果 JSON 字符串包含换行符,.data 方法不会返回对象。

尺寸

  • #12283:jQuery 1.8 outerHeight 返回 undefined 而不是 null

效果

  • #12273:animate 在持续时间为 0 时失败

Event

  • #12149:'change' 事件处理程序在 IE7/8 中泄漏
  • #12383:jQuery.on() 选择器应该只应用于元素的后代

操作

  • #12346:fn.append 无法正常工作
  • #12384:.after 在 IE9 中使用表格行时失败

队列

  • #12278:.promise(type) 对非默认队列不起作用

Selector

  • #12205:各种伪选择器问题
  • #12237:具有子选择器和多个 :not 与 :visible 无法正常工作
  • #12241:为 :eq 传递负索引会抛出语法错误。
  • #12285:自 1.8 版本以来,带有 :not(:first) 的选择器无法正常工作
  • #12292:无效选择器会导致后续有效选择器无法正常工作
  • #12303: 属性选择器在属性值包含 :first :last 时失败
  • #12311:jQuery 1.8 和 .is(":visible")
  • #12314:$.contains 在 IE9 中当第二个参数为 null 时发生致命错误
  • #12359:1.8.0 在加载库时创建无效的标签/属性
  • #12369:ajax,使用 find 方法读取 xml
  • #12403:选择器“> li > :first-child,> :not(li):even”在旧 IE 中失败
  • #12409:与自定义伪选择器的向后兼容性问题
  • #12412:Sizzle 回归“:not([data-role='list-divider']):not(:hidden)”
  • #12419:如果 id 属性包含点,组合选择器会失败。

支持

  • #12333:$.browser.webkit(未定义) -> $.browser.chrome

jQuery Color 2.1.0

发布日期: 作者:

上周早些时候,我发布了 jQuery Color 2.0.0,对于一个为您提供用于处理颜色的 API 的 jQuery Color 插件来说,漫长的等待结束了。

jQuery Color 2.0.0 中有哪些新功能?

从一开始,jQuery Color 就忠实地支持在两个十六进制值之间动画颜色。许多开发者要求访问我们声明的用于实现这一切的内部函数。版本 2 现在包含一个用于创建和修改颜色的 API,以及对 RGBA 和 HSLA 颜色以及动画的支持。

您可以在库自述文件中详细了解 API 和功能。

任何问题都应在问题跟踪器中报告。

为什么已经是 jQuery Color 2.1.0 了?

每个开发者都梦想着在第一个版本中完美地发布一个主要版本,但这种情况很少发生。在过去的两周中,修复了 2.0.0 中遗留的一些小错误,并且在 API 中添加了一个新函数,它应该有助于支持 SVG 样式属性。

下载 jQuery Color 2.1.0

您可以从由Media Temple提供的我们的 CDN 下载此版本。

为了节省文件大小,jQuery Color 插件默认情况下只支持基本颜色关键词,扩展颜色关键词包含在单独的文件中。如果您想同时包含两者,也可以下载捆绑版。

鸣谢

感谢 Dan Heberden、Scott González、Jörn Zaefferer、Mike Sherov、Brendan Byrd 和 Christoffer Sawicki 的帮助,他们为本次发布做出了贡献。

jQuery 1.8 box-sizing:width()、css(“width”) 和 outerWidth()

发布于 作者

jQuery 1.8 的一个重大新功能是内置对 box-sizing: border-box 的理解,该功能受所有现代浏览器支持。(抱歉,IE6 和 IE7 请后退一步;我说的是现代浏览器。)

如果你向人们展示屏幕上带有边框的元素并询问该元素的宽度,他们会自然地从边框的外缘进行测量。然而,这并非 CSS 在其默认 content-box 模式下的工作方式。通常,CSS 宽度和高度仅包括边框和内边距内部的“内容”。因此,设计人员(以及 jQuery)通常需要将宽度添加到左右内边距和边框,以获得元素的“自然”宽度。

使用 box-sizing: border-box 将 CSS 对元素宽度的概念更改为包括内边距和边框尺寸,就像你自然测量的那样。1.8 之前的 jQuery 版本没有完全理解 border-box 的工作方式,但我们已经修复了这个错误。

.width() 方法的返回值没有改变。正如一直以来的文档,它获取和/或设置元素的“内容”宽度,这与元素使用的 CSS box-sizing 无关。但是,jQuery 1.8 现在需要在使用 .width() 时检查 box-sizing 属性,以便它可以确定是否需要减去内边距和边框宽度。这可能很昂贵——在 Chrome 上最高可贵 100 倍!幸运的是,大多数代码并不频繁地使用 .width(),因此这不会引起注意,但同时获取数十个元素宽度的代码可能会受到影响。

如果此性能损失确实影响了你的代码,有一个非常简单的避免此损失的方法。只需使用 .css("width") 而不是 .width(),以明确你想要获取或设置由 CSS 指定的元素的实际宽度。这不需要 jQuery 查看 box-sizing。但是,请记住,作为 getter 的 .css("width") 返回一个带有“px”结尾的字符串,因此在结果必须为数字的情况下,你需要使用类似 parseFloat( $(element).css("width") ) 的东西。

当然,这里关于 .width() 的所有内容也适用于 .height();使用 .css("height") 来避免那里的性能损失。

使用 .outerWidth() 作为 setter

在其他与尺寸相关的新闻中,jQuery 的 .outerWidth().outerHeight() 方法在 1.8 中得到了更新,因此它们可以作为 setter 使用。(jQuery UI 自 UI 版本 1.8.4 起就支持它们作为 setter,但现在它已内置到核心代码中。)要使用 .outerWidth() 作为 setter,请传递一个参数,该参数是一个表示外部宽度的数字(CSS“内容”宽度,加上内边距和边框宽度)。当然,这也能很好地处理 box-sizing: border-box 情况;在那种情况下,它基本上等同于设置 .css("width")

我们收到了来自一些人的一些报告,他们在 jQuery 1.8 中遇到了 .outerWidth() 的问题,因为它返回的是 jQuery 对象而不是数字宽度。例如,如果你调用 $(element).outerWidth(0),就会发生这种情况。在 jQuery 1.8 之前,这是一种无效的 API 使用方式,因为它被记录为接受单个布尔参数。但是,它将无效参数视为布尔值并返回宽度。在 1.8 中,jQuery 使用值 0 设置宽度,就像大多数 setter 一样,它返回 jQuery 对象。

我们正在更新所有 1.8 更改的 API 文档,但目前你可以参考jQuery 1.8 公告中的更改日志以查看发生了哪些变化。

jQuery 1.8 发布

发布于 作者

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 的压缩文件大小实际上比 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) 返回 Array:这是 .closest() 方法的奇怪签名,旨在供旧的 .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: 为空集标准化 getter 返回值。
  • #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: getWH 在 box-sizing 为 border-box 时错误地删除了填充和边框宽度
  • #11787: 删除 jQuery.curCSS
  • #12088: Webkit 现在为更多 getComputedStyle 属性返回百分比
  • #12148: hide 事件在切换时不会触发

数据

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

Deferred

  • #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 的 width 或 outerWidth 会改变列宽值
  • #11604: 将 $(elem).width(-val) 从 no-op 切换为 $(elem).width(0)
  • #11724: $(document).height() 在 Firefox 12 中发生了改变

效果

  • #7109: 在 webkit 上,animate 宽度以无效宽度开始
  • #7157: 动画回调显示元素仍然是 ":animated"
  • #8387: 在 webkit 浏览器上,使用 jQuery 1.5 hide/show 对内联和内联块元素进行动画处理时,出现闪烁问题
  • #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: 在固定 div 上的增量动画在 Chrome 中执行减法而不是加法。
  • #12117: 当动画高度或宽度为 0 时,overflow hidden 未正确设置
  • #12138: 在 Chrome 上,fadeOut 在基本 SVG 元素上不起作用
  • #12150: 当行显示和隐藏时,border-spacing 属性会累积

Event

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

操作

  • #8894: 在 IE 中,clone() 之后调用的 appendTo() 等方法返回不正确的 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: prevAll() 使用复杂的 :not() 选择器会以错误的顺序返回结果
  • #12132: 在 IE10 中,克隆没有父节点的 object 元素时出现错误

Offset

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

Selector

  • #3778: 选择器匹配问题
  • #5568: 选择器在 FF/IE 上使用注释标签时行为不同
  • #7596: 带有方括号 [] 的 xpath 选择器属性名称失败
  • #8473: 在 IE9rc 中,*[tabIndex] 也选择所有没有 tabindex 的元素
  • #8906: .(prevAll('span:has(input,select,textarea)')
  • #9400: 弃用 :text、:radio、:checkbox 等选择器扩展
  • #9810: 重写位置选择器逻辑
  • #10003: 从 #6963 回归/BC 中断
  • #10074: 连接两个 [] 选择器与 :first 不起作用
  • #10499: :has() 内部的 :nth-child() 被视为外部
  • #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 时出现“Maximum call stack size exceeded”错误
  • #11966: 后代选择器
  • #11969: 收集兄弟节点时缺少空检查
  • #12054: 未捕获的 TypeError: 对象 #<HTMLDocument> 没有方法 'getAttribute'
  • #12057: Sizzle 回归
  • #12082: .find() POS 选择器在 1.8b2 中不再起作用
  • #12153: 选择器中出现错误

支持

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

Traversing

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

jQuery 1.8 RC1 发布

发布于 作者

jQuery 1.8RC1 来了。是的,RC 代表“发布候选版”。好消息是,这个版本比我预期的要晚几天发布。这是好消息,因为我们收到了一些宝贵的但最后时刻的错误报告,我们能够修复它们。非常感谢大家抽出时间用你们的代码测试 Beta 2,尤其是那些发现并报告错误的人。

现在我知道你们中很多人都在想:“天哪,从来没有人让我发现错误。” 现在,这是你成为 jQuery 社区英雄的机会。在这个“发布候选版”中,我们可能已经采用了一些正常工作的功能并插入了一些非常隐蔽的问题,甚至我们自己都不知道它们在哪里。请找到它们!只需从这里获取代码

https://code.jqueryjs.cn/jquery-1.8rc1.js

在使用 jQuery 的任何地方试用这个“发布候选版”代码,并通过 错误跟踪器 告知我们你发现的任何问题。请务必说明你在测试 jQuery 1.8 RC1,并请使用 jsFiddle.net 创建一个展示该错误的测试用例,以便我们能够复制它并进行调查。您可以在 jsFiddle 中使用“jQuery (edge)”框架选项,它代表最新的代码。

哦,我有没有说过这是一个“发布候选版”?是的,我说过。谁知道是否会有一个 jQuery 1.8.1?如果你在发布 jQuery 1.8 之后发现了一个错误,可能需要六个月才能修复它。六个月的痛苦,仅仅因为你没有测试“发布候选版”!在你等待这个关键的错误修复时,一个半女人可以生一个孩子!为了你自己好,请试一试!

jQuery 1.8rc1 变更日志

1.8rc1 版本的当前变更日志。

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: 为空集标准化 getter 返回值。
  • #12127: 克隆在 IE10 中无法正确复制选中状态

构建

  • #11767: 支持不带效果的自定义构建
  • #11789: 更新 README 以描述 grunt 构建系统
  • #11856: 模块化尺寸
  • #11857: 模块化 css
  • #11865: 模块化偏移量
  • #11965: 创建 deprecated.js 以包含尽可能多的弃用内容

核心

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

Css

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

数据

  • #7579: jQuery.data() 截断从 data-xxx 属性获取的数字
  • #10589: 删除 $.fn.data("events")

Deferred

  • #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 的 width 或 outerWidth 会改变列宽值
  • #11604: 将 $(elem).width(-val) 从 no-op 切换为 $(elem).width(0)
  • #11724: $(document).height() 在 Firefox 12 中发生了改变

效果

  • #7109: 在 webkit 上,animate 宽度以无效宽度开始
  • #7157: 动画回调显示元素仍然是 ":animated"
  • #8387: 在 webkit 浏览器上,使用 jQuery 1.5 hide/show 对内联和内联块元素进行动画处理时,出现闪烁问题
  • #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: 在固定 div 上的增量动画在 Chrome 中执行减法而不是加法。
  • #12117: 当动画高度或宽度为 0 时,overflow hidden 未正确设置
  • #12150: 当行显示和隐藏时,border-spacing 属性会累积

Event

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

操作

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

Offset

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

Selector

  • #3778: 选择器匹配问题
  • #5568: 选择器在 FF/IE 上使用注释标签时行为不同
  • #7596: 带有方括号 [] 的 xpath 选择器属性名称失败
  • #8473: 在 IE9rc 中,*[tabIndex] 也选择所有没有 tabindex 的元素
  • #8906: .(prevAll('span:has(input,select,textarea)')
  • #9400: 弃用 :text、:radio、:checkbox 等选择器扩展
  • #9810: 重写位置选择器逻辑
  • #10003: 从 #6963 回归/BC 中断
  • #10074: 连接两个 [] 选择器与 :first 不起作用
  • #10499: :has() 内部的 :nth-child() 被视为外部
  • #10570: :text 选择器在页面上存在跨域 iframe 时在 IE7 中抛出错误
  • #10697: Sizzle 改进
  • #10799: 使用 [name="name"] 选择器时结果不一致(也破坏了 .has)