关于 Dave Methvin

首席技术官,PC Pitstop http://pcpitstop.com

jQuery 1.7 RC2 发布

发布于 作者

今天,在万圣节之后,jQuery 团队从我们的 Github 地下室,哦不,仓库里发布了 jQuery 1.7 RC2。除非有关于严重问题的报告,或者一群村民手持火把跑到我们家门口,否则这个代码将与最终的 1.7 版本完全相同。如果您知道任何原因导致这个代码不应该成为最终版本,请告诉我们!

这里放着
RC2 的代码;
请告诉我们
它是否适用于您
为您

在 RC2 中,我们修复了一个棘手的问题,该问题有时会导致 Internet Explorer 8 在加载 jQuery 时完全变成僵尸。恰如其分的是,崩溃与创建我们用于执行特性检测的已分离 <body> 元素有关。IE8 似乎对分离的 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 映射到 encoding,具体取决于浏览器
  • #10176: 注入的脚本标签被评估了两次
  • #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 私有数据应保持私有

延迟

  • #8856: 请求:deferred.isUnresolved()
  • #9033: IE8 中的 try{ } finally{ } 错误
  • #9398: 改进延迟的提案

尺寸

  • #9434: .outerWidth()/.outerHeight()/.innerWidth()/.innerHeight() 应在窗口和文档上工作

效果

  • #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”支持实时事件的 data 参数
  • #6593: IE8:当通过 jQuery 附加单独的处理程序时,DOM 0 事件处理程序被调用两次
  • #6667: 提交事件在某些情况下不会在 IE* 中委托
  • #6903: 特殊事件需要一种方法来确定它们是使用 .bind 还是 .live/.delegate 绑定的
  • #6942: JQuery.event.fix 在 IE 处理键事件时会导致不必要的重绘
  • #7139: “hover” 事件别名应适用于 .bind 以及 .live
  • #7161: 表单元素上的提交事件在 IE 中没有正确取消绑定
  • #7444: 使用“Enter”而不是按钮点击在 ie8 或 ie7 上提交表单会触发实时提交事件两次。
  • #8157: 在 IE 中,聚焦已聚焦的文本字段将阻止 change 事件触发
  • #8728: 事件“mouseenter”在离开时被移除的元素被离开时没有触发
  • #8789: 元数据:事件属性钩子
  • #8858: 特殊事件 – _default 方法无法访问 trigger 方法的`data`参数
  • #8866: IE8 input[type=file] 委托 change 事件文件仅在失焦时触发
  • #8982: bind(“unload someOther”) => 在卸载时,处理程序仅执行一次。
  • #9069: 当悬停在元素的子元素上时,使用 live 或 delegate 时,mouseleave 会触发
  • #9279: delegate() bind 不会为选定的元素正确处理 mouseover/mouseout 和 mouseenter/mouseout
  • #9393: 统一并简化事件系统
  • #9593: 委托的提交事件不是 IE 中的 jQuery.Event 实例
  • #9724: 当 window.parentNode 是 DOM 元素时,trigger 函数中的无限循环
  • #9901: 使用 .delegate 时,event.handleObj.namespace 不正确
  • #9933: jQuery.fn.toggle() 应将状态存储在私有数据对象中
  • #9951: 在 DOM 在处理程序中修改时,.trigger() 中的顺序错误
  • #10375: 不要将`type`包含在 jQuery.event.props 中
  • #10438: 重命名 jQuery.event.propHooks => .fixHooks
  • #10468: 删除已弃用的 jQuery.event.guid 和 jQuery.event.proxy
  • #10489: 断开连接的元素在 .trigger() 上冒泡到窗口
  • #10531: 考虑从 $.event.props 中删除 layerX 和 layerY
  • #10563: jQuery.Event 不再包含与事件委托匹配的元素。
  • #10567: 委托事件错误地匹配类名
  • #10575: 1.6.4 和 1.7rc1 之间的实时事件传播中的重大更改
  • #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: 在 filter/children/siblings 中,Has Attribute 不起作用
  • #9570: 选择器 $(‘form[name=”..”]’) 在某些情况下在 IE8 中返回零个元素
  • #10178: $(window).is(“a”) >> 未捕获的类型错误:无法调用未定义的 toLowerCase 方法
  • #10315: Sizzle 在使用位置选择器时忽略 seed 参数
  • #10562: siblings 方法在使用 Sizzle 调用伪选择器时返回意外的元素

支持

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

遍历

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

jQuery 1.7 RC1 发布

发布于 作者

团队正努力推进 jQuery 1.7 的开发,今天发布了候选版本。完整的功能和修复列表请见下方。我们强烈建议大家在自己的应用中进行测试,确保在最终版本发布前没有重大问题。

测试非常简单,您可以从 jQuery CDN 获取代码

请您将代码添加到现有的应用程序中,并帮助我们进行测试。如果您发现任何问题,请提交 Bug并说明您是在 jQuery 1.7 RC1 版本中测试的。对于任何问题,我们都希望可以及时解决。

同时,我们正在完善文档和发布说明,确保您顺利过渡到 1.7 版本。敬请期待!

jQuery 1.7 RC 1 变更日志

1.7 RC 1 版本的当前变更日志。

Ajax

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

属性

  • #5479: removeAttr: 删除多个属性
  • #6743: 将 enctype 映射到 encoding,具体取决于浏览器
  • #10176: 注入的脚本标签被评估了两次
  • #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 私有数据应保持私有

延迟

  • #8856: 请求:deferred.isUnresolved()
  • #9033: IE8 中的 try{ } finally{ } 错误
  • #9398: 改进延迟的提案

尺寸

  • #9434: .outerWidth()/.outerHeight()/.innerWidth()/.innerHeight() 应在窗口和文档上工作

效果

  • #5684: 效果:动画回调中的异常会导致无限循环
  • #6150: .stop 有时不会清除 .delay
  • #6641: 在动画完成回调中调用 stop() 会导致其他动画冻结
  • #8685: 动画应跟踪动画状态,以便正确处理堆叠动画
  • #9280: 允许为 animate() 使用多个效果队列
  • #9548: animate 对于 svg 元素的 fill-opacity css 属性不起作用
  • #10416: defaultDisplay 在 FF 中返回 block 而不是 table-row 用于 tr
  • #10445: 将 queue 设置为 true 会导致错误
  • #10497: .stop 应允许选择要停止的队列

事件

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

操作

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

杂项

  • #10553: 进一步减少最小许可证标题

选择器

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

支持

  • #5145: jQuery.support.opacity = false 在 Chrome 浏览器中
  • #6809: 添加 jQuery.support.fixedPosition
  • #10558: 测试支持错误

遍历

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

jQuery 1.7 Beta 2 已发布

发布于 作者

在本月早些时候举行的波士顿 jQuery 大会之后,我们根据社区的宝贵反馈,发布了一个新的 beta 版本,其中包含了进一步的修复和稳定性改进。完整的功能和修复列表请见下方。我们强烈建议大家在自己的应用中进行测试,确保在最终版本发布前没有重大问题。

您可以从 jQuery CDN 获取代码

请您将代码添加到现有的应用程序中,并帮助我们进行测试。如果您发现任何问题,请提交 Bug并说明您是在 jQuery 1.7 Beta 2 版本中测试的。对于任何问题,我们都希望可以及时解决!

jQuery 1.7 Beta 2 变更日志

1.7 Beta 2 版本的当前变更日志

Ajax

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

属性

  • #5479: removeAttr: 删除多个属性
  • #10176: 注入的脚本标签被评估了两次
  • #10278: checkboxEl.attr(‘checked’) 在 checkboxEl.click() 之后返回陈旧的值
  • #10429: IE7 – 在调用 removeAttr(‘contenteditable’) 时出现无效的过程调用或参数;

核心

  • #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 私有数据应保持私有

延迟

  • #8856: 请求:deferred.isUnresolved()
  • #9033: IE8 中的 try{ } finally{ } 错误
  • #9398: 改进延迟的提案

尺寸

  • #9434: .outerWidth()/.outerHeight()/.innerWidth()/.innerHeight() 应在窗口和文档上工作

效果

  • #5684: 效果:动画回调中的异常会导致无限循环
  • #6150: .stop 有时不会清除 .delay
  • #6641: 在动画完成回调中调用 stop() 会导致其他动画冻结
  • #8685: 动画应跟踪动画状态,以便正确处理堆叠动画
  • #9280: 允许为 animate() 使用多个效果队列
  • #9548: animate 对于 svg 元素的 fill-opacity css 属性不起作用
  • #10416: defaultDisplay 在 FF 中返回 block 而不是 table-row 用于 tr
  • #10445: 将 queue 设置为 true 会导致错误

事件

  • #3368: event.metaKey 应仅在非 Mac 上分配给 event.ctrlKey
  • #6170: jQuery(window).scroll(); 会导致 IE* 滚动到 0,0
  • #6319: 回归:IE 中 change 处理程序中的 stopPropagation 错误地应用于 keydown 事件
  • #6386: 通过“event.special.live.add”支持实时事件的 data 参数
  • #6593: IE8:当通过 jQuery 附加单独的处理程序时,DOM 0 事件处理程序被调用两次
  • #6667: 提交事件在某些情况下不会在 IE* 中委托
  • #6903: 特殊事件需要一种方法来确定它们是使用 .bind 还是 .live/.delegate 绑定的
  • #6942: JQuery.event.fix 在 IE 处理键事件时会导致不必要的重绘
  • #7139: “hover” 事件别名应适用于 .bind 以及 .live
  • #7161: 表单元素上的提交事件在 IE 中没有正确取消绑定
  • #7444: 使用“Enter”而不是按钮点击在 ie8 或 ie7 上提交表单会触发实时提交事件两次。
  • #8157: 在 IE 中,聚焦已聚焦的文本字段将阻止 change 事件触发
  • #8728: 事件“mouseenter”在离开时被移除的元素被离开时没有触发
  • #8789: 元数据:事件属性钩子
  • #8858: 特殊事件 – _default 方法无法访问 trigger 方法的`data`参数
  • #8866: IE8 input[type=file] 委托 change 事件文件仅在失焦时触发
  • #8982: bind(“unload someOther”) => 在卸载时,处理程序仅执行一次。
  • #9069: 当悬停在元素的子元素上时,使用 live 或 delegate 时,mouseleave 会触发
  • #9279: delegate() bind 不会为选定的元素正确处理 mouseover/mouseout 和 mouseenter/mouseout
  • #9393: 统一并简化事件系统
  • #9593: 委托的提交事件不是 IE 中的 jQuery.Event 实例
  • #9724: 当 window.parentNode 是 DOM 元素时,trigger 函数中的无限循环
  • #9901: 使用 .delegate 时,event.handleObj.namespace 不正确
  • #9933: jQuery.fn.toggle() 应将状态存储在私有数据对象中
  • #9951: 在 DOM 在处理程序中修改时,.trigger() 中的顺序错误
  • #10375: 不要将`type`包含在 jQuery.event.props 中
  • #10438: 重命名 jQuery.event.propHooks => .fixHooks
  • #10468: 删除已弃用的 jQuery.event.guid 和 jQuery.event.proxy
  • #10489: 断开连接的元素在 .trigger() 上冒泡到窗口

操作

  • #6782: 谨慎地允许更多字符串使用 innerHTML
  • #7037: 克隆的元素添加了重复的 mouseover 和 mouseout 事件。

选择器

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

支持

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

遍历

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

jQuery 1.7 Beta 1 已发布

发布于 作者

如果您还没听说,jQuery 大会 2011将于本周晚些时候在波士顿举行。我们准备了一个小东西,我们称之为 jQuery 1.7 Beta 1,我们将在大会上详细讲解。它包含了一系列新功能和重大 bug 修复——在最后一次统计时已经超过了 50 个。

您可以从 jQuery CDN 获取 beta 版本

请您将代码添加到现有的应用程序中,并告知我们是否有任何功能不再正常工作。请提交 Bug 票并确保您说明您是在 jQuery 1.7 BETA 1 版本中测试的。

同时,请探索所有新功能,并查看您最头疼的 bug 是否已修复。如果您等到最终版本发布后再进行测试,就为时已晚!

我们始终鼓励社区中的每个人尝试并参与到 jQuery 核心贡献中。我们已经建立了一个完整页面的信息,致力于帮助您更深入地参与到团队中。团队随时准备协助您帮助我们!

哦,您可能想知道发生了哪些变化,对吧?Addy Osmani 已经在他的最新文章中做了一个很好的开始,所以让我们来介绍一下他文章中没有提到的内容。

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

随着时间的推移,jQuery 已经发展出三种将事件附加到元素的方式:.bind().live().delegate()。然而,在底层,这三种事件 API 都调用浏览器的事件系统;这会导致意想不到的交互。例如,$(document).unbind("click") 将删除所有 .live("click", ...) 事件,因为这些委托事件都附加到 document 上。(这也是为什么您应该使用事件命名空间。)

我们当前的事件 API 不会很快消失,但是为了解决我们引入的不一致性,我们提供了一对全新且简单的事件方法,它们可以完成所有三种方法的工作

    $(elems).on(events, selector, data, fn);
    $(elems).off(events, selector, fn);

如果提供了selector,则它是一个委托事件;否则,它将直接绑定。所有旧 API 的功能都存在;例如,events 可以是一个用空格分隔的事件名称和/或命名空间字符串,或者它可以是一个对象,其中键是事件,值是事件处理程序函数。以下是一些旧方法如何映射到新方法的示例

旧 API 新 API
$(elems).bind(events, fn) $(elems).on(events, fn)
$(elems).bind(events, { mydata: 42 }, fn) $(elems).on(events, { mydata: 42 }, fn)
$(elems).unbind(events, fn) $(elems).off(events, fn)
$(elems).delegate(selector, events, fn) $(elems).on(events, selector, fn)
$(elems).undelegate(selector, events, fn) $(elems).off(events, selector, fn)
$(selector).live(events, fn) $(document).on(events, selector, fn)
$(selector).die(events, fn) $(document).off(events, selector, fn)

IE 6/7/8 中的表单更改和提交事件

这些旧的 Internet Explorer 版本可能会困扰我们一段时间,因此我们花了一些时间来改进它们的性能。事件传递性能已针对它们得到很大提升,但最大的变化是,我们使用了一种不同的方法来修复它们的非冒泡和错误的表单事件。因此,我们能够极大地简化和缩短特殊事件代码。这些事件应该能够正常工作——甚至比以前更好,因为我们关闭了大约六个相关的 bug——但请密切关注任何异常行为。

动画改进

在 1.7 版本之前,如果您在动画完成之前停止了它,则可能会出现正在被动画处理的元素永远不会恢复到其完整大小的情况;它本质上会卡在动画停止时的那个高度。我们通过在动画开始之前记住原始尺寸来修复这个问题,以便稍后可以使用它们。这消除了一些动画(尤其是切换动画)中的一个主要烦恼。

.removeData() 增强功能

Addy 也提到了这一点,但是 .removeData() API 现在允许您传递要删除的名称的空格分隔字符串或名称数组。由于以前在数据名称中允许使用空格,因此代码首先检查您指定的精确名称,然后再按空格拆分字符串。这样,由于此增强功能,任何现有的代码都不会被破坏。

jQuery 1.7 BETA 1 变更日志

以下是 1.7 BETA 1 版本所做更改的完整列表。

Ajax

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

属性

  • #5479: removeAttr: 删除多个属性
  • #10278: checkboxEl.attr(‘checked’) 在 checkboxEl.click() 之后返回陈旧的值

核心

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

CSS

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

数据

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

延迟

  • #8856: 请求:deferred.isUnresolved()
  • #9033: IE8 中的 try{ } finally{ } 错误
  • #9398: 改进延迟的提案

效果

  • #5684: 效果:动画回调中的异常会导致无限循环
  • #6150: .stop 有时不会清除 .delay
  • #6641: 在动画完成回调中调用 stop() 会导致其他动画冻结
  • #8685: 动画应跟踪动画状态,以便正确处理堆叠动画
  • #9280: 允许为 animate() 使用多个效果队列
  • #9548: animate 对于 svg 元素的 fill-opacity css 属性不起作用

事件

  • #3368: event.metaKey 应仅在非 Mac 上分配给 event.ctrlKey
  • #6170: jQuery(window).scroll(); 会导致 IE* 滚动到 0,0
  • #6319: 回归:IE 中 change 处理程序中的 stopPropagation 错误地应用于 keydown 事件
  • #6386: 通过“event.special.live.add”支持实时事件的 data 参数
  • #6593: IE8:当通过 jQuery 附加单独的处理程序时,DOM 0 事件处理程序被调用两次
  • #6667: 提交事件在某些情况下不会在 IE* 中委托
  • #6705: focus() 导致 focus 事件在 IE8 中被处理两次
  • #6903: 特殊事件需要一种方法来确定它们是使用 .bind 还是 .live/.delegate 绑定的
  • #6942: JQuery.event.fix 在 IE 处理键事件时会导致不必要的重绘
  • #7139: “hover” 事件别名应适用于 .bind 以及 .live
  • #7161: 表单元素上的提交事件在 IE 中没有正确取消绑定
  • #7444: 使用“Enter”而不是按钮点击在 ie8 或 ie7 上提交表单会触发实时提交事件两次。
  • #8157: 在 IE 中,聚焦已聚焦的文本字段将阻止 change 事件触发
  • #8728: 事件“mouseenter”在离开时被移除的元素被离开时没有触发
  • #8789: 元数据:事件属性钩子
  • #8858: 特殊事件 – _default 方法无法访问 trigger 方法的`data`参数
  • #8866: IE8 input[type=file] 委托 change 事件文件仅在失焦时触发
  • #8982: bind(“unload someOther”) => 在卸载时,处理程序仅执行一次。
  • #9069: 当悬停在元素的子元素上时,使用 live 或 delegate 时,mouseleave 会触发
  • #9279: delegate() bind 不会为选定的元素正确处理 mouseover/mouseout 和 mouseenter/mouseout
  • #9393: 统一并简化事件系统
  • #9593: 委托的提交事件不是 IE 中的 jQuery.Event 实例
  • #9724: 当 window.parentNode 是 DOM 元素时,trigger 函数中的无限循环
  • #9901: 使用 .delegate 时,event.handleObj.namespace 不正确
  • #9933: jQuery.fn.toggle() 应将状态存储在私有数据对象中
  • #9951: 在 DOM 在处理程序中修改时,.trigger() 中的顺序错误

操作

  • #6782: 谨慎地允许更多字符串使用 innerHTML
  • #7037: 克隆的元素添加了重复的 mouseover 和 mouseout 事件。

选择器

  • #5637: 布尔(和空)属性选择器失败
  • #7128: 由于使用 DOM 属性,属性选择器在 qSA 和 Sizzle 之间不一致
  • #9261: 在 filter/children/siblings 中,Has Attribute 不起作用
  • #9570: 选择器 $(‘form[name=”..”]’) 在某些情况下在 IE8 中返回零个元素
  • #10178: $(window).is(“a”) >> 未捕获的类型错误:无法调用未定义的 toLowerCase 方法
  • #10315: Sizzle 在使用位置选择器时忽略 seed 参数

支持

  • #6809: 添加 jQuery.support.fixedPosition

jQuery 1.6.4 RC1 已发布

发布于 作者

jQuery 1.6.4 将很快发布,我们需要您帮助我们找到候选版本中存在的任何剩余 bug。我们正在发布一个新版本来解决 1.6.3 版本中出现的几个最后一分钟的 bug。由于 1.7 版本将在下个月发布,我们认为在进行更广泛的更改和功能添加之前,修复这些 bug 并最终确定 1.6.x 版本非常重要。

您可以通过包含以下两个文件(一个压缩,一个未压缩)中的任何一个来进行测试。如果您发现任何与 1.6.3 版本重要的差异,请尽快提交 Bug,并确保说明您是在 jQuery 1.6.4 RC1 版本中测试的。我们首选的测试用例平台是jsFiddle;您只需在那里使用“jQuery (edge)”选择即可。

jQuery 1.6.4 RC1 变更日志

1.6.4 版本的当前变更日志

数据

  • #10194: 带有单个连字符包围字母的数据属性名称无法通过驼峰命名法名称访问

事件

  • #10208: $(“form”).live(“submit”, fn) 在 IE8 中未从 <button type=”submit”> 中触发

支持

  • #10197: jQuery 1.6.3 中的 mime 类型 application/xhtml+xml 存在问题

如果您发现问题,请尽快按照上述说明提交 Bug 报告和测试用例。博客评论或 Twitter 无法作为有效的 Bug 报告!

jQuery 1.6.3 已发布

发布于 作者

jQuery 1.6.3 现已发布!这是基于 jQuery 1.6 的第三个次要版本,它包含了许多 bug 修复,如下所示。

与往常一样,我们提供了两个 jQuery 副本,一个压缩版和一个未压缩版(用于调试或阅读)。

您可以帮助我们,将代码添加到现有的应用程序中,并告知我们是否有任何功能不再正常工作。请提交 Bug,并确保您说明您是在 jQuery 1.6.3 版本中测试的。

非常感谢所有报告 bug、提交补丁以及为此次发布提供帮助的人员!我们希望鼓励社区中的每个人参与到 jQuery 核心贡献中。我们已经建立了一个完整页面的信息,致力于帮助您更深入地参与到团队中。团队随时准备协助您帮助我们!

亮点

修复 XSS 攻击向量: 用户 ma.la 报告 了一个常见的模式,许多网站都使用它通过 location.hash 选择元素,这允许攻击者将脚本注入页面。这种做法似乎非常普遍,因此我们决定修改选择器识别,以防止在最常见的情况下注入脚本。如果任何传递给 $() 的字符串包含“#”字符,则不能包含 HTML 标签(因此不能包含脚本)。有关更多信息和测试用例,请参阅上面链接的票证。

不再有动画 “虫洞”: 当我们在 1.6 版中添加支持时,我们对浏览器的 requestAnimationFrame API 寄予厚望。但是,自那时以来,我们收到的最大数量的投诉之一与 requestAnimationFrame 在标签不可见时行为方式有关。所有在标签不可见时启动的动画都会“堆叠”,并且只有在标签重新获得焦点时才会执行。然后它们都以超快速度进行动画!我们已删除对该 API 的支持(这对您调用 jQuery 动画功能的方式没有任何影响),并计划将其合并到 jQuery 的未来版本中。

更好地处理 HTML5 数据属性名称: $().data() API 同时执行双重任务,除了读取 HTML5 data- 属性的初始值外,还处理 jQuery 和插件内部使用的數據。我们已经改进了使用 HTML5 约定的能力,例如在需要时将 camel-case 转换为 camelCase。但是,请记住,$().data() API 只會在最初读取 HTML5 data- 属性,出于性能原因,不会将后续数据更改与属性同步。要更新 HTML 标记中的实际属性,请使用 .attr()

jQuery 1.6.3 更改日志

1.6.3 版本的更改日志

Ajax

  • #9255: jQuery.parseXML 错误处理在 webkit 浏览器中不起作用
  • #9854: 传递 statusText 而不是“标准化”它
  • #9887: jQuery.ajaxSetup 可能导致不必要的内存使用
  • #9970: ajax.js 中的拼写错误: status 应该为 jqXHR.status?
  • #10098: 编码类似注释的 Accept 标头以避免移动运营商篡改

属性

  • #9630: foo.contents().hasClass() 返回不正确的值
  • #9699: removeAttr(‘style’) 不会在 webkit 中始终如一地删除 style 属性
  • #9719: removeAttr(‘disabled’) 不会更改 IE6 中输入的颜色
  • #9979: .prop(‘tabIndex’) 对尚未设置 tabIndex 的元素返回不一致的结果
  • #9980: 通过对 IE6/7 中的所有内容使用 getAttributeNode 来简化 attr 代码

构建

  • #9988: 压缩的 jQuery 中的最小许可证标题

核心

  • #9521: 使用 $(location.hash) 和 $(#) 的 XSS 攻击?
  • #9897: try-catch isPlainObject 检测
  • #10076: 如果第二个参数为 `null` 或 `undefined`,则 $.inArray 会导致 IE6 和 Chrome 崩溃

CSS

  • #6652: 动画结束后删除 filter:alpha(opacity=100)
  • #9572: 在 .css() 方法中支持 -ms-transform
  • #10021: 使用 .css() 和 .animate() 的相对值语法无法添加负数

数据

  • #8235: jQuery.data 在某些情况下会抛出脚本错误
  • #9318: HTML5 数据属性在属性名称包含数字时具有奇怪的行为
  • #9413: $.fn.removeData 不会删除名称中带破折号的数据
  • #9779: 允许对数据属性值的非空|未定义进行评估
  • #9794: jQuery.fn.data() 正确处理对任意数据属性值的访问
  • #10016: 无法使用 jQuery.data 方法检索带有破折号的键名的“假值”
  • #10080: 来自框架窗口的卸载在 IE8 中中断

尺寸

  • #10123: .width() 可以在 Firefox 6 中返回浮点数

效果

  • #9381: 由于 requestAnimationFrame,浏览器失去焦点后动画会停止
  • #9678: setInterval 被动画清除

事件

  • #7071: 在 IE 提交特殊处理程序期间,访问 VML 元素的“type”属性会失败

操作

  • #9587: 克隆带有对象的 div 会在 IE8 中导致错误

支持

  • #9634: 在 support.js 初始化期间,左上角可见“t”字符
  • #9823: 在 CSS 中对 BODY 使用 background-image 时,IE 8 会崩溃
  • #9964: test/support.js 模块 strictEqual 拼写错误
  • #10029: $.support.scriptEval 已删除,但仍包含在文档中

如果您发现问题,请尽快按照上述说明提交 Bug 报告和测试用例。博客评论或 Twitter 无法作为有效的 Bug 报告!

jQuery 1.6.3 RC1 发布

发布日期 作者

jQuery 1.6.3 即将发布!我们需要您的帮助来测试这个候选版本,以确保我们万无一失。

您可以随意通过包含以下两个文件之一(一个压缩,一个未压缩)来进行测试。我们首选的测试用例平台是 jsFiddle;您可以在其中使用“jQuery (edge)”选项。如果您需要报告错误并且无法使用 jsFiddle,请使用未压缩版本以及您的测试用例。

请使用您最珍贵的代码测试此版本。如果您发现与 1.6.2 存在任何重要差异,请尽快 提交错误报告,并确保提及您正在针对 jQuery 1.6.3 RC1 进行测试。

如果您从一个更旧版本的 jQuery 进行重大更新,您发现的差异可能是由于主要版本发布中引入的已记录的行为更改造成的。请先使用发布的 1.6.2 版本检查您的代码,以确保问题只存在于 1.6.3 RC1 中。

亮点

修复 XSS 攻击向量: 用户 ma.la 报告 了一个常见的模式,许多网站都使用它通过 location.hash 选择元素,这允许攻击者将脚本注入页面。这种做法似乎非常普遍,因此我们决定修改选择器识别,以防止在最常见的情况下注入脚本。如果任何传递给 $() 的字符串包含“#”字符,则不能包含 HTML 标签(因此不能包含脚本)。有关更多信息和测试用例,请参阅上面链接的票证。

不再有动画 “虫洞”: 当我们在 1.6 版中添加支持时,我们对浏览器的 requestAnimationFrame API 寄予厚望。但是,自那时以来,我们收到的最大数量的投诉之一与 requestAnimationFrame 在标签不可见时行为方式有关。所有在标签不可见时启动的动画都会“堆叠”,并且只有在标签重新获得焦点时才会执行。然后它们都以超快速度进行动画!我们已删除对该 API 的支持(这对您调用 jQuery 动画功能的方式没有任何影响),并计划将其合并到 jQuery 的未来版本中。

更好地处理 HTML5 数据属性名称: $().data() API 同时执行双重任务,除了读取 HTML5 data- 属性的初始值外,还处理 jQuery 和插件内部使用的數據。我们已经改进了使用 HTML5 约定的能力,例如在需要时将 camel-case 转换为 camelCase。但是,请记住,$().data() API 只會在最初读取 HTML5 data- 属性,出于性能原因,不会将后续数据更改与属性同步。要更新 HTML 标记中的实际属性,请使用 .attr()

jQuery 1.6.3 更改日志

1.6.3 版本的当前更改日志

Ajax

  • #9255: jQuery.parseXML 错误处理在 webkit 浏览器中不起作用
  • #9854: 传递 statusText 而不是“标准化”它
  • #9887: jQuery.ajaxSetup 可能导致不必要的内存使用
  • #9970: ajax.js 中的拼写错误: status 应该为 jqXHR.status?
  • #10098: 编码类似注释的 Accept 标头以避免移动运营商篡改

属性

  • #9630: foo.contents().hasClass() 返回不正确的值
  • #9699: removeAttr(‘style’) 不会在 webkit 中始终如一地删除 style 属性
  • #9719: removeAttr(‘disabled’) 不会更改 IE6 中输入的颜色
  • #9979: .prop(‘tabIndex’) 对尚未设置 tabIndex 的元素返回不一致的结果
  • #9980: 通过对 IE6/7 中的所有内容使用 getAttributeNode 来简化 attr 代码

构建

  • #9988: 压缩的 jQuery 中的最小许可证标题

核心

  • #9521: 使用 $(location.hash) 和 $(#) 的 XSS 攻击?
  • #9897: try-catch isPlainObject 检测
  • #10076: 如果第二个参数为 `null` 或 `undefined`,则 $.inArray 会导致 IE6 和 Chrome 崩溃

CSS

  • #6652: 动画结束后删除 filter:alpha(opacity=100)
  • #9572: 在 .css() 方法中支持 -ms-transform
  • #10021: 使用 .css() 和 .animate() 的相对值语法无法添加负数

数据

  • #8235: jQuery.data 在某些情况下会抛出脚本错误
  • #9318: HTML5 数据属性在属性名称包含数字时具有奇怪的行为
  • #9413: $.fn.removeData 不会删除名称中带破折号的数据
  • #9779: 允许对数据属性值的非空|未定义进行评估
  • #9794: jQuery.fn.data() 正确处理对任意数据属性值的访问
  • #10016: 无法使用 jQuery.data 方法检索带有破折号的键名的“假值”
  • #10080: 来自框架窗口的卸载在 IE8 中中断

尺寸

  • #10123: .width() 可以在 Firefox 6 中返回浮点数

效果

  • #9381: 由于 requestAnimationFrame,浏览器失去焦点后动画会停止
  • #9678: setInterval 被动画清除

事件

  • #7071: 在 IE 提交特殊处理程序期间,访问 VML 元素的“type”属性会失败

操作

  • #9587: 克隆带有对象的 div 会在 IE8 中导致错误

支持

  • #9634: 在 support.js 初始化期间,左上角可见“t”字符
  • #9823: 在 CSS 中对 BODY 使用 background-image 时,IE 8 会崩溃
  • #9964: test/support.js 模块 strictEqual 拼写错误
  • #10029: $.support.scriptEval 已删除,但仍包含在文档中

如果您发现问题,请尽快按照上述说明提交 Bug 报告和测试用例。博客评论或 Twitter 无法作为有效的 Bug 报告!

jQuery 1.3.2 发布

发布日期 作者

下载

jQuery 1.3.2
https://code.jqueryjs.cn/jquery-1.3.2.min.js 压缩版 (使用 Gzipping 压缩后大小为 19kb)
https://code.jqueryjs.cn/jquery-1.3.2.js 标准版 (大小为 120kb)

更改

以文档顺序返回的元素

这是对 jQuery 选择器引擎的更改,它会重新排序返回的结果,使它们以文档顺序排列,而不是以传递选择器时的顺序排列。进行此更改是为了符合 选择器 API 规范(jQuery 在支持它的浏览器中内部使用该规范)。

示例结果

  // jQuery 1.3.1 (and older)
  $("h1, h2, h3")
  => [ h1, h1, h2, h2, h3, h3 ]

  // jQuery 1.3.2
  $("h1, h2, h3")
  => [ h1, h2, h3, h3, h1, h2 ]

我要感谢 Diego Perini 敦促我们实施此更改。

.live() 现在可以阻止冒泡

现在可以在回调中调用 event.stopPropagation()return false,并使其停止 live 事件的冒泡。这意味着您现在可以在彼此内部绑定 live 事件,并让内部处理程序阻止外部处理程序触发。

例如

  <ul>
    <li><b>Google</b></li>
    <li><b>Yahoo</b></li>
  </ul>
  <script>
    $("li").live("click", function(){
      $(this).addClass("active");
    });
    $("li b").live("click", function(){
      $(this).addClass("active");
      return false;
    });
  </script>

我要感谢 Iraê 为这个问题提出的解决方案。

对于那些想知道 .live() 目前缺少的功能(如 submit 和 change 事件)的人来说,您可以期待所有这些功能将在 jQuery 1.3.3 中发布,该版本将于下个月某个时候发布。

:visible/:hidden 重构

我们改变了 :visible 和 :hidden 选择器背后的逻辑(这些选择器贯穿 jQuery 用于确定元素的可见性)。

以下是逻辑的更改方式
* 在 jQuery 1.3.1(及更早版本)中,如果元素的 CSS“display”不是“none”,其 CSS“visibility”不是“hidden”,并且其类型(如果是输入)不是“hidden”,则该元素是可见的。
* 在 jQuery 1.3.2 中,如果元素的浏览器报告的 offsetWidth 或 offsetHeight 大于 0,则该元素是可见的。

此更改意味着什么?这意味着,如果元素的 CSS display 为“none”,或者其任何父/祖先元素的 display 为“none”,或者元素的宽度为 0 并且元素的高度为 0,则元素将被报告为隐藏。

进行此切换的好处是什么?结果有两个方面
* 性能大幅提升。(见下文。)
* 如果元素在“隐藏”元素内部,则该元素将被报告为“隐藏”(在没有使用插件的情况下,这是不可能的)。

我要感谢 Matheus Almeida 为改进这些选择器的性能而提出的部分更改建议。

.height()/.width() 重构

所有与宽度和高度相关的选择器都已重构,从而极大地提高了它们在所有浏览器中的速度。

我要感谢 Mike Helgeson 在此方面的贡献,这些贡献在很大程度上是我们在这些方法中看到的一些巨大改进的功劳。

IE 中的选择器加速

新的 Sizzle 选择器引擎的优势开始显现,因为来自更大 JavaScript 社区的贡献不断涌现。已经加入了一些改进,这些改进有助于提高引擎的性能,尤其是在 Internet Explorer 中。

我要感谢 Fabio Buffoni 在此方面的贡献,这些贡献在很大程度上是这些加速的功劳。

.appendTo()/etc. 现在返回插入的元素

这是一个(小)API 更改,解决了 jQuery API 中的一个错误。appendTo、prependTo、insertBefore、insertAfter 和 replaceAll 方法现在都返回插入的元素集,而不是原始的元素集。

为了理解此更改,我们需要看一个简单的示例。

在以下标记中,在 jQuery 1.3.1(及更早版本)中,将发生以下情况

  <div></div>
  <div></div>
  <script>
  $("<p/>")
    .appendTo("div")
    .addClass("test");
  </script>

1.3.1(及更早版本)中的结果

  <div><p class="test"></p></div>
  <div><p></p></div>

这是因为 .appendTo 等只返回传递给它的元素,而不是实际插入的元素(由于只传递了一个段落,即第一个要插入的段落,所以只有第一个段落添加了类)。

因此,如果您在 jQuery 1.3.2 中运行相同的代码,最终将得到

<div><p class=”test”></p></div>
<div><p class=”test”></p></div>

这是预期结果。唯一的区别是,appendTo、prependTo、insertBefore、insertAfter 和 replaceAll 现在都推送到 jQuery 堆栈(这意味着它们受 .end() 的影响)。

我们对上述方法的现有用法进行了调查,发现没有此更改会影响任何现有代码的情况,因此我们认为可以安全地进行此更改(尤其是考虑到它从一开始就是预期的行为)。

测试

我们关于 jQuery 项目的测试套件和测试方法有一些公告。
* 我们现在完全支持,并且测试套件在 Internet Explorer 8rc1 和 Chrome 2(Nightly)中完全通过(除了我们通常选择的浏览器)。
* 测试套件已突破 1500 个测试(确切地说,是 1504 个)。

这意味着我们现在积极测试并在以下 11 个浏览器中通过测试套件:Chrome 1、Chrome Nightly、IE 6、IE 7、IE 8rc1、Opera 9.6、Safari 3.2、WebKit Nightly、Firefox 2、Firefox 3、Firefox Nightly。

(我们正在等待 Opera 10 的下一个测试版,然后再开始完全支持它,当前测试版存在一些严重问题。)

为了衡量 jQuery 不同部分的性能,我们使用 SlickSpeed 测试套件的修改版来运行我们的测试(经过调整以处理非选择器测试)。测试运行的原始结果如下(所有时间单位为毫秒)。

选择器测试

我们使用 Yahoo 主页的副本(一个具有代表性的复杂网页),并使用人们实际使用的选择器。针对人们当前使用的选择器将有助于提高现有和未来应用程序的性能。

Frameworks	jQuery 1.2.6	jQuery 1.3	jQuery 1.3.2
IE 6		1059		799		626

:hidden/:visible 测试

我们测试了测试页中许多元素的 :hidden 和 :visible 选择器。

Frameworks	jQuery 1.3	jQuery 1.3.2
Firefox 3	1512		190
Firefox 3.1	1202		161
Safari 3.2	592		80
Safari Nightly	334		43
Opera 9.6	1307		497
IE 6		1948		738
IE 7		1295		830
Chrome		490		30

width/height 测试

我们测试了测试页中的 width、height、innerWidth、innerHeight、outerWidth 和 outerHeight 方法。

Frameworks	jQuery 1.3	jQuery 1.3.2
Firefox 3	310		106
Firefox 3.1	281		84
Safari 3.2	146		37
Safari Nightly	166		32
Opera 9.6	345		116
IE 6		313		124
IE 7		283		123
Chrome		113		27

jQuery 1.3 发布

发布日期: 作者:

jQuery 团队很高兴发布 jQuery JavaScript 库的最新主要版本!这个版本经历了大量的编码、测试和文档编写,我们对此感到非常自豪。

我想要特别感谢 Ariel Flesler 和 Brandon Aaron,他们在修复 bug 和发布版本方面付出了很多努力。

概述

jQuery 1.3 中发生了一些重大变化,以下是一些最大和最突出的变化。

Sizzle 选择器引擎

jQuery 拥有一个全新的 CSS 选择器引擎,代号为 Sizzle。我们想要一个引擎,它能够做到:

  1. 对于最常用的选择器,比我们目前的引擎更快。
  2. 完全可扩展(为了性能,我们在 jQuery 的过去版本中不得不牺牲一些可扩展性)。
  3. 完全独立。

在性能方面,我们做得很好,比之前的引擎快了大约 49%。

这尤其令人惊讶,因为 1.2.6 中的引擎已经相当快了,并且我们在扩展性方面取得了很大进步。

在开发新引擎的过程中,有一点非常明显:我们希望能够与其他库和开发人员进行协作。我们看到了与一些顶尖 JavaScript 开发人员进行良好合作的机会,其结果将有助于所有库的用户。出于这个原因,我们确保 Sizzle 能够完全独立运行(无依赖关系)。

此外,为了表示诚意和合作意愿,我们已将 Sizzle 的源代码发布到 Dojo 基金会。我们想要一个共同的平台,让每个人都可以共同工作,并且有一个明确的长期版权持有者。

现在,我们正在与 Prototype、Dojo、Yahoo UI、MochiKit 和 TinyMCE(以及许多其他)一起开发 Sizzle,使其更加完善。

实时事件

jQuery 现在支持“实时事件”,即可以绑定到所有当前和未来元素的事件。使用事件委托和无缝的 jQuery 风格 API,结果既易于使用又非常快。

有关实时事件的更多信息,请参阅 .live() 文档。

在处理实时事件时,我们想要一个快速且可扩展的解决方案。为此,我们需要一个设计用于处理委托元素过滤的选择器引擎(粗略地说,“此选择器是否与此元素匹配”)。新的 Sizzle 选择器引擎超出了我们的所有预期,比我们之前的解决方案快了近 30 倍。

通过使用高级过滤技术,我们能够为您提供一个事件委托解决方案,它不会拖慢浏览器的速度,并且可以扩展到页面上一次性处理数十个或数百个委托。

jQuery 事件对象

Ariel Flesler 为 jQuery 1.3 带来了 jQuery 事件系统的一些重大重构。此次更改的大部分内容归结为新的 jQuery.Event 对象。此对象完全封装了通常在符合 W3C 的事件对象实现中找到的所有功能,并使其能够在所有浏览器中平稳运行。

此外,与事件系统相关的许多单独的更改也已进行,这些更改将在后面的事件部分中详细介绍。

HTML 注入重写

所有与将 HTML 注入文档相关的代码(例如 append、prepend、before 和 after 方法)都已重新设计。在分析 jQuery 应用程序时,我们发现这是最常见的瓶颈之一,因此急需改进。提供的功能与 jQuery 之前版本中提供的功能相同,但额外的好处是速度快得多(总体上快了大约 6 倍)。

我们还重新设计了 DOM 元素的创建(例如 $("<script/>")),使其与调用 $(document.createElement("script")) 相同(因此速度更快且更合理)。

偏移量重写

Brandon Aaron 认为,对于 1.3,.offset() 方法需要完全重写。从头开始重新编写,它不仅更好地处理跨浏览器问题,而且速度更快。

与 1.2.6 中的偏移量方法相比,性能提升了近 3 倍,这种重写一定会让您的复杂交互更加流畅。

不再进行浏览器嗅探

此版本的最后一个主要功能是您可能永远不会看到或直接处理的功能,但它是一个重要的更改,将有助于 jQuery 持续更长时间并且出现更少的错误:从 1.3 开始,jQuery 在内部不再使用任何形式的浏览器/userAgent 嗅探,并且是第一个这样做的主要 JavaScript 库。

浏览器嗅探是一种技术,您对代码在未来如何运行进行假设。通常,这意味着假设特定浏览器 bug 将始终存在,这会导致浏览器进行更改并修复 bug 时代码出现故障。

相反,我们使用一种称为功能检测的技术,在这种技术中,我们模拟特定浏览器功能或 bug 来验证其是否存在。我们已将 jQuery 中使用到的所有检查封装到一个对象中:jQuery.support。有关它、功能检测以及此功能提供的更多信息,请参阅文档。

需要注意的是,jQuery.browser 仍然存在于 jQuery 中,并且在可预见的将来会一直存在(太多的插件和代码依赖于它)。也就是说,我们已弃用它,以鼓励您(以及所有 JavaScript 开发人员)认真考虑在您的代码中使用功能检测。

升级

在 jQuery 1.3 中,我们试图最大限度地减少任何大型升级的麻烦,并保留所有现有的公共 API。也就是说,请仔细阅读潜在的破坏性更改列表,以了解哪些内容可能会导致应用程序出现问题。

注意:许多插件都在提供更新的版本以与 jQuery 1.3 相对应。如果您在使用特定插件时遇到困难,请务必查看是否有新版本发布。特别是,jQuery UI 和验证插件都有与 jQuery 1.3 兼容的更新版本。

下载

与往常一样,我们提供两个 jQuery 副本,一个是压缩版(我们现在使用 YUI Compressor 作为默认压缩器),另一个是未压缩版(用于调试或阅读)。

https://code.jqueryjs.cn/jquery-1.3.min.js jQuery 压缩版 (使用 gzipping 压缩后 18kb)
https://code.jqueryjs.cn/jquery-1.3.js jQuery 标准版 (114kb)

此外,Google 为我们提供了一个在他们的服务器上托管的 jQuery 副本。此 jQuery 副本会自动压缩和使用 gzipping 压缩,并从 Google 的快速边缘缓存服务器提供服务。

https://ajax.googleapis.ac.cn/ajax/libs/jquery/1.3/jquery.min.js

您可以随意将上述 URL 直接包含到您的网站中,您将获得快速加载 jQuery 的所有性能优势。

更改

以下是一些可能会导致您的网页出现向后兼容性问题的更改。

  • 已删除 [@attr] 中的“@”。自 1.2 以来已弃用,此旧语法不再有效。只需删除“@”即可升级。
  • 触发的事件现在会向上冒泡 DOM。不知情的事件处理程序可能会意外捕获比预期更多的事件。
  • ready() 方法不再尝试对等待所有样式表加载进行任何保证。相反,所有 CSS 文件都应该在页面上的脚本之前包含。
  • .isFunction 现在更简单,它不再处理一些奇怪的边缘情况(为了简单和性能)。
  • “a, b, c” 样式选择器的顺序可能会更改。支持 querySelectorAll 的浏览器(Safari、Firefox 3.5+、Opera 10+、IE 8+)将按文档顺序返回元素,其他浏览器将(当前)按指定的顺序返回它们。在 1.3.2 及更高版本中,所有以逗号分隔的选择器都将按文档顺序返回。
  • trigger 和 triggerHandler 方法不再接受数据数组中的事件对象。相反,它们应该直接指定为参数。
  • 未记录的“extra”函数已从 trigger 和 triggerHandler 函数中删除。
  • 内部 jQuery.event.trigger 不再返回处理程序返回的最后一个项目,而是根据 W3C 规范返回 true 或 false。您应该使用 jQuery.Event 对象来捕获特定返回值。
  • 您应该始终确保在标准模式下运行页面。已知某些方法在怪癖模式下无法正常工作。
  • 已删除创建选择器插件的旧(已弃用)方式。以前,您可以创建字符串编码的插件,这些插件后来被转换为函数,现在已删除,请直接创建函数。
  • jQuery.param(obj) 执行 obj 的函数,而不是将它们转换为字符串。

以下属性已弃用(支持功能检测和 jQuery.support,如概述中所述:jQuery.browser、jQuery.browser.version、jQuery.boxModel。

以下浏览器不再受支持:Safari 2

性能

为了衡量 jQuery 不同部分的性能,我们使用 SlickSpeed 测试套件的修改版 来运行我们的测试(经过调整以处理非选择器测试)。测试运行的原始结果如下(所有时间单位为毫秒)。

我们使用 Yahoo 主页的副本(一个具有代表性的复杂网页),并使用人们实际使用的选择器。针对人们当前使用的选择器将有助于提高现有和未来应用程序的性能。

Frameworks	jQuery 1.2.6	jQuery 1.3	Dojo 1.2.3	MooTools 1.2.1	Prototype 1.6.0.3
Firefox 3	184		111		147		240		137
Firefox 3.5	113		34		105		135		55
Safari 3.2	71		15		64		76		50
Safari Nightly	46		15		65		47		18
Opera 9.6	107		75		73		132		87
IE 6		854		640		561		1611		3174
IE 7		210		181		150		490		761
Chrome		30		13		23		118		10

委托过滤测试

为了测试委托过滤,我们尝试查看给定元素是否与选择器匹配。 jQuery 1.3 和 Prototype 提供了用于处理此操作的原生方法(分别为 .is 和 .match),而 jQuery 1.2.6、Dojo 和 MooTools 都使用“运行选择器并查看元素是否在结果中”的技术。

Frameworks	jQuery 1.2.6	jQuery 1.3	Dojo 1.2.3	MooTools 1.2.1	Prototype 1.6.0.3
Firefox 3	3260		199		1630		3798		763
Firefox 3.5	1047		113		620		1101		298
Safari 3.2	1169		91		820		1223		188
Safari Nightly	911		65		294		590		125
Opera 9.6	1764		167		898		1976		451
IE 6		22142		1201		13000		17227		12827
IE 7		4908		341		2664		5497		2994
Chrome		959		125		700		939		153

DOM 操作测试

这些测试分析了插入 DOM 片段的性能(在 jQuery 和 Prototype 的情况下,这是 HTML,对于 MooTools,它是使用他们的 Element 类)。 Dojo 没有提供用于注入 HTML 或构建 DOM 元素的任何明确的辅助程序,因此它被排除在外。

Frameworks	jQuery 1.2.6	jQuery 1.3	MooTools 1.2.1	Prototype 1.6.0.3
Firefox 3	161		41		47		323
Firefox 3.5	113		31		42		78
Safari 3.2	77		10		25		41
Safari Nightly	87		22		22		31
Opera 9.6	130		23		36		84
IE 6		710		110		600		971
IE 7		560		60		330		460
Chrome		49		14		23		21

.offset() 测试

在多个元素上运行 jQuery .offset() 方法。

Frameworks	jQuery 1.2.6	jQuery 1.3
Firefox 3	142		30
Firefox 3.5	45		23
Safari 3.2	92		18
Safari Nightly	75		39
Opera 9.6	39		26
IE 6		151		70
IE 7		100		50
Chrome		115		21

.hide()/.show() 结果

在多个元素上运行 .hide() 和 .show() 方法。

Frameworks	jQuery 1.2.6	jQuery 1.3
Firefox 3	2680		722
Firefox 3.5	1867		448
Safari 3.2	1015		577
Safari Nightly	532		306
Opera 9.6	2327		1173
IE 6		8242		2715
IE 7		1912		961
Chrome		1922		551