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: seleter 有错误
  • #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 不会返回正确的元素

帮助我们为 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 1.8.1 发布

发布于 作者

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

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

修复的最后一组错误列在下面。别忘了,朋友们,我们非常乐意听到关于 beta 版和候选版本的错误!您不必等到最终版本发布才能用您的代码进行测试。我们越早修复这些错误,对团队和 jQuery 社区来说就越顺利。

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

不要使用 怪癖模式jQuery 从未支持怪癖模式,我们也不在怪癖模式下进行任何测试。这可能会影响诸如 $("window").height() 之类的值,并且 jQuery 1.8 怪癖模式结果已更改,以支持一些现代浏览器功能。我们看到的大多数问题案例都来自希望使用标准模式但其 doctype 无效或在 <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() 方法,当参数为 null 时,ajax 类型将为 "POST",而不是 "GET"

Core

  • #12282: 1.8.0 回归 - document ready 在 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 可能产生错误的值

Data

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

Dimensions

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

Effects

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

Event

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

Manipulation

  • #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: 当第二个参数为 null 时,IE9 中的 $.contains 出现致命错误
  • #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 (undefined) -> $.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。但是,请记住,.css("width") 作为 getter 返回一个字符串,其中包含结尾处的“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() 问题的用户报告,因为 .outerWidth() 返回了 jQuery 对象,而不是数字宽度。例如,如果您调用 $(element).outerWidth(0),就会出现这种情况。在 jQuery 1.8 之前,这是一种无效的 API 使用方式,因为它记录为接受单个布尔参数。但是,它将无效参数视为布尔值,并返回宽度。在 1.8 中,jQuery 使用值 0 设置宽度,并且像大多数 setter 一样,它返回 jQuery 对象。

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

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 不会将 data 参数与 jQuery.ajaxSetup 合并
  • #10944: $.ajax 并不总是返回实现 Promise 接口的对象
  • #11013: 弃用使用 Deferred/Promise 与同步 $.ajax
  • #11402: evalScript 函数在 IE 中出现错误 80020101 错误
  • #11743: jQuery 在 $.appendTo() 中的脚本标签 ajax 请求期间静默忽略错误
  • #11778: 缓存的 XHR 请求仍然应该异步解析
  • #12122: jQuery.ajax() async 弃用与 $.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: 将 offset 模块化
  • #11965: 创建 deprecated.js 以包含尽可能多的已弃用内容

Core

  • #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: 当 box-sizing 为 border-box 时,getWH 错误地删除了填充和边框宽度
  • #11787: 删除 jQuery.curCSS
  • #12088: Webkit 现在为更多 getComputedStyle 属性返回百分比
  • #12148: 切换时 hide 事件不触发

Data

  • #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() 时,保留上下文对象

Dimensions

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

Effects

  • #7109: 在 webkit 上,animate 宽度以无效宽度开始
  • #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 设置不正确
  • #12150: 当行显示和隐藏时,border-spacing 属性累积

Event

  • #8545: IE 中的事件泄漏
  • #10067: 也在 document.readyState === 'interactive' 时触发 $.ready
  • #10895: bindReady 中的 doScrollCheck ie 技巧毫无理由地降低了 ie7 的性能
  • #11101: 从 trigger 方法中弃用“exclusive”事件选项
  • #11315: delegate() 和 :first 在具有相同类别的嵌套元素中的问题
  • #11328: 在 Windows 上,Ctrl 键不会将 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, … ) 签名

Manipulation

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

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: 页面上存在跨域 iframe 时,:text 选择器在 IE7 中抛出错误
  • #10697: Sizzle 大修
  • #10799: [name="name"] 选择器结果不一致(也会破坏 .has)

jQuery 1.8 Beta 2 发布

发布日期 作者

在 jQuery 中心,过去几周真是太疯狂了,先是发布了 Beta 1,接着又在旧金山举行了 jQuery 大会。别担心!在所有旅行、会议、会谈和关于 jQuery 未来的博客文章之间,我们实际上还是写了一些代码。作为证据,这里就是 jQuery 1.8 Beta 2

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

这是我们呼吁你,jQuery 社区,帮助我们完成这项工作的关键部分。在旧浏览器、新浏览器、红色浏览器和蓝色浏览器中使用 Beta 2。(分别是 IE6、Chrome Canary、Opera 和 Internet Explorer。)请在所有代码中测试这个文件,并请在所有模式下进行彻底测试。Beta 2 中有东西坏了?请现在告诉我们,在我们完成之前!

在那些测试了 Beta 1 的人的帮助下,我们发现了一些错误并修复了它们。我们无法足够强调在使用这些测试版进行测试时,我们从那里获得反馈有多重要。我们不喜欢发布最终版,因为当你将它们放到网页中时会导致问题,而防止这种情况发生的办法是在使用测试版进行测试,并在提前发现问题时告诉我们。

注意:此版本需要与 jQuery UI 配合,才能解决一些问题。因此,使用 jQuery UI 的页面需要包含最新的 UI 主版本,才能针对 jQuery 1.8b2 进行测试。你可以在这里获取它:https://code.jqueryjs.cn/ui/jquery-ui-git.js。jQuery UI 1.8 将会有一个维护版本,其中包含 jQuery core 1.8 支持,但鼓励用户在 jQuery UI 1.9 发布时升级。

如果你发现问题,请尝试将其简化为一个简单的测试用例。jsFiddle 是我们首选的获取测试用例的方式,因为它允许我们调整测试用例、诊断问题并探索解决方案。(为框架选择jQuery (edge),即最新代码。)有了测试用例,请访问错误跟踪器,告诉我们发生了什么。谢谢!

除了在 Beta 1 中报告的错误修复外,这个新的测试版还对 Sizzle 引擎进行了重大重写,以获得更好的性能。它修复了与 IE 6、7 和 8 相关的大量错误,使这些浏览器使用起来更加一致。与 oldIE 的完美将永远是一件难以捉摸的事情,但我们仍在努力使你的开发生活尽可能轻松,无论浏览器是什么。

如果你按照 Github 上的README 文件 中的描述构建自己的自定义版本,现在可以选择省略一些将在未来版本中删除的已弃用功能。随着我们隔离更多已弃用功能,我们将向此文件添加内容。

以下是自 jQuery 1.7.2 以来所有更改的完整列表。

jQuery 1.8b2 更改日志

1.8b2 版本的当前更改日志。

Ajax

  • #4624: default ajaxSettings.contentType 中的字符集
  • #10978: jQuery.param() 应该允许非原生构造的对象作为属性值
  • #11264: evalScript() 使用 ajaxSetup() 设置的默认值
  • #11426: 在 IE 中,请求 JPG 图片时 jQuery.ajax() 总是失败

属性

  • #5571: 在 jQuery 中,当将 undefined 传递给任何设置器时,允许链式调用
  • #10828: attr("coords") 在 IE7 中返回 undefined
  • #10870: $.removeAttr("selected") 的行为不正确
  • #11316: 首先考虑根据元素类型,然后根据节点名称查看 valHooks,而不是反过来

构建

  • #10692: 配置 jshint 选项以更准确地匹配样式指南
  • #10693: 将单元测试中的“在 iframe 中测试某些东西”代码泛化
  • #10901: 如果测试器从 file:// 运行或没有 PHP,则使单元测试失败
  • #10902: 在单元测试中测试 jQuery 的构建版本的能力
  • #10931: 单元测试不应该需要网络访问

Core

  • #10466: jQuery.param() 将包裹的原始类型误认为深度对象

Css

  • #10639: 在 Webkit 中,outerWidth(true) 和 css('margin') 返回的是 % 而不是 px
  • #10754: 让 jQuery.swap 返回回调的返回值,而不是仅仅执行它
  • #10782: 计算宽度不正确
  • #10796: IE7 中 $('#el').css.('background-position') 存在 bug
  • #10858: css.js 正则表达式不完整
  • #11119: curCSS 函数只需要 2 个参数

Data

  • #11309: 十六进制格式的 data-* 属性解析不正确

Deferred

  • #11306: 在 $.Callbacks 对象上调用 .disable() 或 .lock() 会破坏其 fired() 状态

Effects

  • #8498: 动画钩子
  • #10006: 当针对文档片段调用时,方法 show 在所有浏览器中的表现不一致
  • #10848: 动画切换在某些原子边界情况下会丢失状态跟踪
  • #11415: 在 CSS 值非法的情况下,静默地忽略负值
  • #11469: 动画 (.animate) 中的负边距

Event

  • #8165: 在 Chrome 中,.live('click', handler) 在带有子元素的禁用按钮上触发
  • #10819: 消除 "this.on.call(this, "
  • #10878: 在 jQuery 1.7 中,$("select").live("change", function(){ …在 IE8 中失效
  • #10961: 在 IE6-9 中使用 jQuery 1.7.1 时,XRegExp 中存在错误
  • #10970: .on() 选择器参数不能与 :not(:first) 选择器一起使用
  • #10984: 无法 off() 自定义事件 ($.event.special)
  • #11021: 悬停 hack 弄乱了名为 "hover" 的命名空间
  • #11076: .clone(true) 丢失了委托过滤器
  • #11130: jQuery.fn.on: 带有 null 选择器的绑定映射忽略数据
  • #11145: $(document).on() 不能与 name="disabled" 一起使用

Manipulation

  • #9427: 将 undefined 传递给 .text() 不会触发 setter
  • #10753: 将 evalScript 函数内联到 manipulation.js 中,因为它只被使用一次
  • #10864: 文档片段上的 text() 方法始终返回空字符串
  • #11055: 更新 HTML5 Shim 元素列表以支持最新的 html5shiv
  • #11217: Webkit 中的追加问题
  • #11291: 在 IE 中,使用 HTML5 节点名称克隆 XMLDoc 会失效
  • #11323: 类型为 "text/ecmascript" 的脚本标签会泄漏到 DOM 中
  • #11356: safeFragment 内存泄漏

Misc

  • #10952: 当 Callbacks 对象被标记为 "once" 时,.fired() 不起作用
  • #11257: 如果 PHP 缺失,测试套件中源文件路径错误

队列

  • #10967: .promise() 没有将方法附加到目标

支持

  • #7986: 页面有 DIV 元素 CSS 时,$.support.boxModel 存在 bug
  • #11048: 支持测试会影响 IE6-9 中定位元素的布局
  • #11337: $.support.reliableMarginRight 中存在 bug

Traversing

  • #11370: $('<div>').siblings() 抛出异常

新添:旧金山 jQuery 大会培训课程!

发表时间 作者

为了回应大量请求和电子邮件,以及我们最初的承诺,我们现在要宣布:我们在旧金山 jQuery 大会之前增加了一天的初级/中级培训课程 :)

门票现已开售 (在页面左侧,位于折叠下方)。培训将由我们的朋友 Bocoup 提供,并由慷慨的 微软 人员承办。以下是培训师 Ben Alman 和 Rebecca Murphey 将要教授的内容的片段

在 Bocoup 的为期一天的中级 jQuery 培训中,您将与 jQuery 资深人士一起构建基础,这将使您成为更强大的开发者,并为接下来的两天的精彩演讲做好准备。您甚至将学习创建自己的 jQuery 插件的基础知识。将要教授的主题包括

  • jQuery() 函数
  • 选择和遍历
  • 操作 DOM
  • 使用事件使事情发生
  • AJAX
  • 用特效增强
  • 用插件扩展 jQuery
  • jQuery UI
  • jQuery Mobile

需要注意的是:培训和大会都在旧金山,但地点是不同的。培训课程在旧金山的中心地带,位于市场街,大会则距离那里大约 5 到 10 分钟,位于加州大学旧金山分校的使命湾校区。请注意,大会和培训需要单独的入场券,所以如果您想参加两者,请确保您已经购买了两种票券。

我们仍在努力争取增加高级培训课程,但到目前为止,我们收到的主要是对初级课程的请求。所以这就是我们提供的 :)

希望你们都购买了大会门票,期待在那里见到你们!

关于专利的触感

发表时间 作者

随着越来越多的公司进军移动领域,触摸事件已经成为 Web 开发人员的热门话题。我们大多数人都知道触摸事件支持单点和多点触摸跟踪。我们中有些人知道同时处理触摸和鼠标的棘手之处。更少的人知道有几种触摸事件模型,更少的人尝试同时支持多种模型。我想谈谈我们今天所处的位置、我们是如何走到今天的,以及我们将来可能面临的潜在问题。

简史

早在 2007 年,苹果公司发布了 iPhone,随之而来的是触摸事件。Neil Roberts 在一篇 SitePen 文章 中很好地概括了苹果公司的实现:“尽管一开始 API 看起来有点粗糙,但一旦你学会了它们,你就可以在你的应用程序中做出令人惊叹的事情。” 果然,我们看到了很多惊人的事情,而且并没有太多关于“粗糙” API 的抱怨。这种模型后来被 Android、诺基亚、RIM、Opera 等公司采用。苹果的实现目前仅在其私有的 WebKit 分支中可用。直到 2009 年底,触摸事件才首次出现在主 WebKit 仓库中,来自 Android 的实现。

同样是在 2009 年,W3C 开始讨论 DOM Level 3 事件的统一指针模型。这个想法是将触摸(包括多点触摸)、笔/触控笔和鼠标事件合并到一个模型中,使它能够轻松地同时支持所有指针类型。然而,由于当时的目标是保持规范尽可能小,以便更快地成为推荐规范,所以这个想法被放弃了。

两年后的 2011 年 3 月,Mozilla 发布了 Firefox 4,它包含了他们自己的触摸事件版本。Mozilla 模型与鼠标事件模型和被放弃的 W3C 模型非常接近,因为事件对象是扁平的;event.pageX 等属性存在,并且没有触摸列表。如果您想跟踪多个触摸,可以通过事件的 streamId 来实现。Mozilla 后来放弃了这种实现,转而支持一个基于苹果公司模型的新兴 W3C 规范。

2011 年 1 月,W3C 开始起草一个基于 WebKit 实现的触摸事件规范。几个月后,它成为一个工作草案,并在 12 月成为一个候选推荐规范。下个月,一个专利咨询小组 (PAG) 成立,以调查苹果公司披露的专利。由于苹果公司缺席触摸事件工作组 (WG) 以及他们的专利披露,W3C停止了规范的工作,并且他们计划在 PAG 结束或向 WG 提出建议之前不会继续。截至撰写本文时,PAG 尚未就专利的影響做出决定,但该小组的目标是尽快得出结论。

与此同时,微软采取了一种不同的方法来处理触摸,并在 IE10 中使用指针事件实现了他们自己的MSPointerEvent 对象。MSPointerEvent 对象类似于原始的 Mozilla 实现,因为事件对象是扁平的,并包含一个 pointerId 属性。然而,MSPointer 与所有其他模型(触摸特定模型)之间存在一些重要的差异。

注意:以上只是 Web 上触摸事件的简史;如果您对触摸界面的历史感兴趣,您可能想查看 Bill Buxton 的我所知和喜爱的多点触摸系统

指针事件与触摸事件

如上所述,通用指针事件,例如原始的 W3C 想法或 MSPointer,具有支持多个指针设备的优势。事实上,在运行 Windows 8 的三星平板电脑上,鼠标、触控笔和手指都归一化为 MSPointer;您甚至可以使用 pointerType 属性来确定使用的是哪种类型的指针。除了支持所有当前的指针设备外,MSPointer 的设计方式使得未来的设备可以轻松添加,并且现有代码将自动支持新设备。更棒的是,MSPointer 事件对象与其他事件具有相同的结构,与 TouchEvent、TouchList 和 Touch 的组合相比,学习曲线更短。

MSPointer 和 Touch 之间的另一个重大区别是,MSPointer 支持悬停(悬停和悬停事件)。虽然大多数触摸设备具有硬件限制,不允许悬停,但索尼最近宣布了 Xperia sola,它具有“神奇的浮动触摸技术”。这带来了一个重要的问题:触摸事件是基于特定设备的特定输入类型而设计的。指针事件代表了 Web 上输入的完全不同方法。虽然我们已经介绍了这对开发人员的影响,但考虑对硬件制造商的影响很有趣。为了让苹果在触摸界面上取得成功,他们必须创建一种新的事件模型。针对新型式和新输入方法的创新要么会被现有标准扼杀,要么需要一套新的 API,效仿苹果在 iPhone 和触摸事件中采取的步骤。指针事件为开发人员和硬件制造商都提供了一个干净的解决方案。可以想象,在几年内,开发人员可以将指针事件用作指针的唯一事件模型,将鼠标事件留作历史。

分裂的未来

虽然 W3C 仍在计划继续推进触摸事件规范(待 PAG 建议通过),但未来尚不明朗。即使 PAG 确定苹果的专利不适用,并且规范成为 W3C 建议,也不清楚微软是否会实施这种模型,因为 Windows 需要多输入事件系统。如果 W3C 改变方向并开始制定指针事件规范,也不清楚苹果,或者更广泛地说 WebKit,是否会实施新的事件模型。即使有 W3C 建议,我们也有可能多年来都无法在浏览器和设备之间获得一致的事件模型。

无论 W3C 选择追求哪种模型,jQuery 都致力于填补空白,就像我们对其他事件(如提交和更改)所做的那样。我们认为指针事件模型更易于使用,并且更具前瞻性,我们希望它能够实现标准化,即使触摸事件也实现了标准化。但是,我们只对标准化为 W3C 建议感兴趣,并且如果没有任何官方的 W3C 规范,我们将不会提供自定义指针事件。我们正在与 W3C 和微软合作,尝试为我们的用户和开放 Web 找到最佳前进方向。

行动号召:微软提交指针事件提案

我们希望公开呼吁微软向 W3C 提交指针事件提案。触摸事件工作组以及更广泛地说,各个浏览器供应商都表示对指针事件感兴趣。最有效的方法是让微软正式向 W3C 提交提案。

行动号召:社区尝试两种事件模型

我们还鼓励社区尝试触摸和 MSPointer。试用 API、构建应用程序并提供反馈。如果您有兴趣,但没有必要的硬件,请考虑与一位或多位当地开发人员合作。虽然有很多开发人员在触摸之上进行构建,但很少有人在 MSPointer 之上进行构建,而公开比较它们的人就更少了。我们鼓励您将您的反馈直接发送到 W3C public-webevents 邮件列表,但您可以随时在此处留下反馈,我们会转达给相关人员。

行动号召:提交现有技术

如果您知道任何关于多点触控/触摸列表的现有技术,即使是在 Web 之外,也请 联系 W3C。这包括编程模型和 API,尤其是使用事件的那些。这将有助于专利咨询小组尽快得出结论。同样,如果您愿意在此处留下评论,我们会转达给相关人员。

jQuery 1.7.2 发布

发布于

jQuery 1.7.2 非常棒!发布候选版本顺利完成,所以我们只做了一个 微小的更改,并于今天发布给您,热切期盼您的使用。您现在可以从 jQuery CDN 获取最新代码,谷歌和微软 CDN 很快就会跟进

注意:如果您使用 jQuery Mobile,请仅将 jQuery 1.7.2 与 jQuery Mobile 1.1 一起使用。对于以前的 jQuery Mobile 版本,请继续使用 jQuery 核心 1.7.1 或更早版本。

您可以使用 错误跟踪器 报告错误;请务必在 jsFiddle 上创建一个测试用例,以便我们能够轻松地找出问题所在。如果您不确定是否为错误,请咨询我们的 论坛StackOverflow。请不要在下面的博客评论中报告错误。

与往常一样,如果没有很多人的辛勤工作,这个版本将不可能实现。首先是 jQuery 核心团队:gnarf、jaubourg、mikesherov、rwldrn 和 timmywil。jQuery UI、Mobile 和基础设施团队的支持也得到了极大的赞赏,尤其是 danheberden 在对抗 Trac 方面的英勇努力。

像 adebree、caii、cmc3cn、KYSergey、mathiasbynens、miskith、MrMamen、Orkel、pasky、SineSwiper、tavelli 和 vlazar 这样的社区成员通过报告、验证和修复错误做出了贡献。特别感谢 gibson042 和 sindresorhus,他们为让 1.7.2 成为一个很棒的版本付出了努力,并获得了 jQuery 金叶丛奖。不要让他们独享这份乐趣!如果您想为网络上最受欢迎的 JavaScript 库做出贡献,请加入 IRC 上的 #jquery-dev 频道或 我们的论坛 上的“jQuery 核心开发”部分,跟大家打个招呼吧!

特别感谢 Louis-Rémi Babé,他在发布前 30 分钟提交了一个 修复负边距动画回归的补丁

jQuery 1.7.2 更改日志

以下是 1.7.2 版本的更改日志。

Ajax

  • #4624: default ajaxSettings.contentType 中的字符集
  • #10978: jQuery.param() 应该允许非原生构造的对象作为属性值
  • #11264: evalScript() 使用 ajaxSetup() 设置的默认值
  • #11426: 在 IE 中,请求 JPG 图片时 jQuery.ajax() 总是失败

属性

  • #5571: 在 jQuery 中,当将 undefined 传递给任何设置器时,允许链式调用
  • #10828:attr(“coords”)在 IE7 中返回未定义
  • #10870:$.removeAttr(“selected”)的行为不正确
  • #11316: 首先考虑根据元素类型,然后根据节点名称查看 valHooks,而不是反过来

构建

  • #10692: 配置 jshint 选项以更准确地匹配样式指南
  • #10693:在单元测试中泛化“在 iframe 中测试某物”代码
  • #10901:如果测试人员从 file:// 运行或没有 PHP,则单元测试应该失败
  • #10902: 在单元测试中测试 jQuery 的构建版本的能力
  • #10931:单元测试不应该需要互联网访问

Core

  • #10466: jQuery.param() 将包裹的原始类型误认为深度对象

Css

  • #10639:outerWidth(true) 和 css(‘margin’) 在 Webkit 中返回 % 而不是 px
  • #10754: 让 jQuery.swap 返回回调的返回值,而不是仅仅执行它
  • #10782: 计算宽度不正确
  • #10796:IE7 中 $(‘#el’).css.(‘background-position’) 的错误
  • #10858: css.js 正则表达式不完整
  • #11119: curCSS 函数只需要 2 个参数

Data

  • #11309: 十六进制格式的 data-* 属性解析不正确

Deferred

  • #11306: 在 $.Callbacks 对象上调用 .disable() 或 .lock() 会破坏其 fired() 状态

Dimensions

  • #3838:$(document).height() 在 IE6 中不正确

Effects

  • #8498: 动画钩子
  • #10006: 当针对文档片段调用时,方法 show 在所有浏览器中的表现不一致
  • #10848: 动画切换在某些原子边界情况下会丢失状态跟踪
  • #11415: 在 CSS 值非法的情况下,静默地忽略负值
  • #11469:动画 (.animate) 中的负边距

Event

  • #8165:.live(‘click’, handler) 在 Chrome 中针对具有子元素的禁用按钮触发
  • #10819:消除“this.on.call(this, “
  • #10878:$(“select”).live(“change”, function(){ … 在 jQuery 1.7 中的 IE8 中损坏
  • #10961: 在 IE6-9 中使用 jQuery 1.7.1 时,XRegExp 中存在错误
  • #10970:.on() 选择器参数不适用于 :not(:first) 选择器
  • #10984: 无法 off() 自定义事件 ($.event.special)
  • #11021:悬停黑客破坏了名为“悬停”的命名空间
  • #11076: .clone(true) 丢失了委托过滤器
  • #11130: jQuery.fn.on: 带有 null 选择器的绑定映射忽略数据
  • #11145:$(document).on() 不适用于 name=”disabled”

Manipulation

  • #9427: 将 undefined 传递给 .text() 不会触发 setter
  • #10753:将 evalScript 函数内联到 manipulation.js 中,因为它只使用一次
  • #10864: 文档片段上的 text() 方法始终返回空字符串
  • #11055: 更新 HTML5 Shim 元素列表以支持最新的 html5shiv
  • #11217: Webkit 中的追加问题
  • #11291:使用 HTML5 nodeName 克隆 XMLDoc 在 IE 上中断
  • #11323:带有 type=”text/ecmascript” 的脚本标签泄漏到 DOM 中
  • #11356: safeFragment 内存泄漏

Misc

  • #10952:.fired() 在回调对象上使用“once”标记时不起作用
  • #11257: 如果 PHP 缺失,测试套件中源文件路径错误

队列

  • #10967: .promise() 没有将方法附加到目标

支持

  • #7986: 页面有 DIV 元素 CSS 时,$.support.boxModel 存在 bug
  • #11048: 支持测试会影响 IE6-9 中定位元素的布局
  • #11337: $.support.reliableMarginRight 中存在 bug

Traversing

  • #11370:$(‘<div>’).siblings() 抛出异常