jQuery 1.8.1 发布

发布于 作者

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

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

以下是修复的最后一些 bug。请记住,我们喜欢在测试版和候选版本中听到有关 bug 的消息!您不必等到正式发布才能用您的代码进行测试。我们越早修复这些 bug,团队和 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 创建 良好的 bug 报告 的人。如果我们在这个版本中意外遗漏了任何 bug,请告知我们。首先检查 bug 跟踪器,看看是否已报告。如果没有,请使用 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: .data 方法如果 JSON 字符串包含换行符,则不会返回对象。

尺寸

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

效果

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

事件

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

操作

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

队列

  • #12278: .promise(type) 不适用于非默认队列

选择器

  • #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 (undefined) -> $.browser.chrome

关于“jQuery 1.8.1 发布”的 19 个想法

  1. 注意到 jQuery.support() 中有一个毫无意义的保护

    a = div.getElementsByTagName(“a”)[ 0 ];
    a.style.cssText = “top:1px;float:left;opacity:.5”;
    // 无法获得基本测试支持
    if ( !all || !all.length || !a ) {
    return {};
    }

    对 !a 的测试毫无意义,因为 a.style.cssText 会在到达 !a 之前抛出异常。

    干杯

  2. 哇!即使有“文档就绪过早触发”这个糟糕的 bug,我也没想到会在美国假期之后得到这个更新。

    现在就转向 2.0 :) 你们其他人:在抱怨不能使用 2.1 版之前,先将您的网站从 jquery 1.4 和 1.5 迁移出去,因为您在中国有网站 ;)

  3. IE 相关的东西工作得更好。它修复了几个我甚至没有意识到存在于 jquery 1.8 库中的问题。谢谢!

  4. 在我们的大型网络应用程序中看到了使用 1.8.1 时出现了一个严重的性能问题,而在使用 1.8.1 时没有出现。

    最明显的是在文本框中输入时(每次按键后大约有 500 毫秒的延迟)和点击表单元素周围。

    该应用程序具有大型 DOM,但 1.8.0 可以很好地处理它。

  5. Ult Combo 说:

    很棒且快速的修复!我注意到不仅修复了那里列出的问题,还修复了一些 [http://bugs.jquery.com/ticket/12416 其他] 回归。

    Google CDN 什么时候会提供 1.8.1 版?

  6. Morris 提到的问题是,之前这段 CSS 是在 div.innerHTML 赋值中内联设置的。

    也许应该将 a.style.cssText 赋值移到 !a 测试之后。

  7. 你们会做一个在线工具来让人们可以自定义 jQuery 1.8.x 吗?
    我不是一个伟大的开发者,我不理解你们的 "grunt-thing" 。:)

  8. 我同意 Simon 关于性能的评论(至少对 IE8 来说是这样)。我有一个使用 jsTree、自动完成、.on() 事件处理程序的复杂 UI,仅仅是聚焦一个文本框,在 1.8.1 中就会出现明显的停顿,而在 1.8.0 中却没有。

    我不知道我能提供哪些有用的细节,请告诉我。

  9. David,第一个参数实际上必须是一个元素。

    我建议你停止在生产代码中使用 $._data(element, “events”)。阅读 JQuery 1.8 的发布说明中的 “已移除的内容” 部分(https://blog.jqueryjs.cn/2012/08/09/jquery-1-8-released/

    “你仍然可以使用 $._data(element, “events”) 获取事件数据以进行调试。注意,这不是一个受支持的公共接口;实际的数据结构可能会在不同版本之间发生不兼容的更改。”

  10. Stefan Hayden 说:

    我也发现 IE 7、8、9 的性能很慢。我在 1.8 和 1.8.1 中都看到了这种性能下降。但在 1.7.2 或更低版本中没有看到这种缓慢。我想提交一个 bug 报告,但我不知道问题出在哪里。

    缓慢现象非常奇怪,因为它似乎影响到所有东西。即使是纯粹的 CSS 链接悬停效果也存在延迟。目前我无法缩小范围,但我将继续尝试找出问题所在。

  11. Zachary Pudil 说:

    我遇到了与 Setfan Hayden 相同的性能问题,但只在 IE 7 中出现。IE 8 和 9 运行完美。

  12. 压缩版本中有一些不可见的非 ANSI 字符,导致我的文本编辑器在尝试导航时表现得很奇怪。我不确定这在生产环境中会造成什么问题——也许是上面提到的性能问题?

  13. 我遇到了同样的缓慢现象,但在所有浏览器上都是如此,1.7.2 运行相同的代码却很流畅。

  14. 我们尝试将 jQuery 升级到 1.8.1,将 jQuery UI 升级到 1.8.23。在 IE 6 和 7 中,我们开始收到常见的错误,“页面上的脚本导致 Internet Explorer 运行缓慢。如果继续运行,你的计算机可能会变得无响应”。我们恢复到 1.7.1,错误消失了,jQuery UI 在最新版本中与旧版本的 jQuery 配合良好。我相信这肯定是我们这边的一个错误选择器,但肯定是运行速度变慢的问题。

  15. 我同意大家的观点。在 jQuery 1.7.2 中,IE 的性能很好,但升级到 1.8.1 后,我们在事件之间遇到了一些延迟。我们将 change 和 blur 事件绑定到输入字段。当 .on() 选择器绑定到大量元素时,1.8.1 在 Tab 键操作时会遇到性能下降。jQuery 1.7.2 不会出现这种行为。在解决这个问题之前,我将恢复到 1.7.2。