jQuery Color v2 Beta 1 发布

发布于 作者

早在 2007 年,我们发布了 jQuery Color 插件,它一直为您提供基于颜色的动画。我们现在正在准备此插件的第二个版本,该版本添加了 API、RGBA、HSLA 和许多其他功能。现在是时候进行 Beta 测试了!此插件的仓库可以在 github.com/jquery/jquery-color 上找到。  还有 未压缩版压缩版 在 code.jquery.com 上可用。

新功能概述

RGBA

我们现在支持 RGBA 颜色值。在不支持 RGBA 的浏览器中,将使用最接近元素的 backgroundColor 来计算颜色的“混合”近似值。虽然这并不是“真正的”alpha,但至少在处理纯背景色时,它将提供 alpha 的错觉。  这是 Opera 10、Chrome 10、Firefox 3.6 和 IE 6 运行 此 alpha 混合演示 的屏幕截图
Opera 10, Chrome 10, Firefox 3.6, and IE 6  demonstrating alpha blending

HSLA

我们现在也支持在所有浏览器中使用 HSLA 颜色值,除了 alpha,它使用上述相同技术。

易于使用的 API

不再是简单的私有实用方法组,$.Color() 现在创建了一个新的 Color 对象。新的 Color 对象可以通过几种不同的方式初始化:颜色名称、十六进制颜色代码、css 样式的 rgba/hsla、rgba 值的数组或具有颜色属性的对象。现在有针对每个颜色属性的辅助方法,例如 .red().hue(),可以获取或设置特定的值。结合 .toRgbString().transition().is() 等辅助函数,$.Color 现在可以处理您可能拥有的任何颜色需求。请参阅 github.com/jquery/jquery-color 上的 README 以概述所有新可用函数。不再是 jQuery.Color 只是为您提供简单的颜色动画,您现在可以使用其 API 来执行复杂的颜色计算和动画!

快速示例

// Create a red Color object:
var red = $.Color( 'rgba(255,0,0,1)' ); // using a css string

// Create a red Color object, then make orange:
var orange = $.Color( '#FF0000' ).green( 153 );

// Get the color halfway between red and blue:
var between = $.Color([ 255, 0, 0 ]).transition( "blue", 0.5 );

动画部分颜色

我们添加了支持仅定义颜色对象的一个或两个属性,以便您可以像 这样 动画使用部分颜色

// desaturate the background of this element
elem.animate({
    backgroundColor: $.Color({ saturation: 0 })
}, 1000);

报告问题/请求功能

如果您发现新颜色插件存在任何问题,或想请求功能,请创建一个 github issue

此外,我们很乐意看到并展示新的 $.Color beta 的一些优秀用法,因此请务必在评论中与我们分享。

jQuery 1.6.1 发布

发布于 作者

我们很高兴地宣布 jQuery 1.6 的首次更新!

您可以从 jQuery CDN 获取代码

此外,您还可以直接从 Microsoft 和 Google 的 CDN 加载 URL

Microsoft CDN:http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.6.1.min.js
Google CDN:https://ajax.googleapis.ac.cn/ajax/libs/jquery/1.6.1/jquery.min.js

您可以帮助我们,将这些代码放入您现有的应用程序中,并告知我们是否有任何不再起作用的地方。请 提交错误报告,并确保说明您正在使用 jQuery 1.6.1 进行测试。

我们希望鼓励社区中的每个人尝试 参与 jQuery 核心的贡献。我们已经建立了一个 完整页面,专门介绍如何更多地参与团队工作。团队随时准备帮助您帮助我们!

从 1.5.2 升级到 1.6.1

随着新的 .prop() 方法的引入以及对 .attr() 方法的更改,jQuery 1.6 引起了关于属性和属性之间的区别以及它们如何相互关联的讨论。它还带来了一些向后兼容性问题,这些问题已在 1.6.1 中得到解决。从 1.5.2 升级到 1.6.1 时,您无需更改任何属性代码。

以下是 jQuery 1.6 和 1.6.1 中属性模块的更改描述,以及 .attr() 方法和 .prop() 方法的首选用法。但是,如前所述,jQuery 1.6.1 将允许您像以前一样在所有情况下使用 .attr()

请注意,1.6 版本说明中描述的关于 .data() 方法的更改已被解决,现在可以在 1.5.2 和 1.6.1 之间无缝工作。

发生了什么变化

属性模块的更改消除了属性和属性之间的歧义,但导致了 jQuery 社区的一些困惑,因为 jQuery 1.6 之前的版本都使用一种方法 (.attr()) 处理属性和属性。旧的 .attr() 方法有很多错误并且难以维护。

jQuery 1.6.1 包含几个错误修复以及对属性模块的更新。

具体来说,在 1.6.1 中,诸如 checked、selected、readonly 和 disabled 等布尔属性将像在 jQuery 1.6 之前的版本中那样处理。这意味着像这样的代码

$(“:checkbox”).attr(“checked”, true);
$(“option”).attr(“selected”, true);
$(“input”).attr(“readonly”, true);
$(“input”).attr(“disabled”, true);

甚至

if ( $(“:checkbox”).attr(“checked”) ) { /* Do something */ }

在 1.6.1 中无需更改即可像以前一样工作。

为了使 jQuery 1.6 中 .attr() 的更改清晰明了,以下是一些在以前版本的 jQuery 中有效但应切换到使用 .prop().attr() 用例示例

.attr() 正确的 .prop() 用法
$(window).attr… $(window).prop…
$(document).attr… $(document).prop…
$(“:checkbox”).attr(“checked”, true); $(“:checkbox”).prop(“checked”, true);
$(“option”).attr(“selected”, true); $(“option”).prop(“selected”, true);

首先,在 jQuery 1.6 中,对 window 或 document 使用 .attr() 方法不起作用,因为 window 和 document 不能具有属性。它们包含属性(例如 location 或 readyState),应该使用 .prop() 或直接使用原始 javascript 进行操作。在 jQuery 1.6.1 中,.attr() 将为 window 和 document 委派 .prop() 方法,而不是抛出错误。

其次,由于这些属性与其对应的属性之间的特殊关系,checked、selected 和其他之前提到的布尔属性正在接受特殊处理。基本上,属性是您在 html 中看到的内容

<input type=”checkbox” checked=”checked”>

诸如 checked 的布尔属性仅设置默认或初始值。对于复选框,checked 属性设置页面加载时复选框是否应被选中。

属性是浏览器用于跟踪当前值的方式。通常,属性会反映其对应的属性(如果存在)。布尔属性并非如此。布尔属性会保持最新状态,当用户单击复选框或在 select 元素中选择一个选项时。相应的布尔属性不会。如上所述,它们仅由浏览器用于存储初始值。

$(“:checkbox”).get(0).checked = true;
// Is the same as $(":checkbox:first").prop(“checked”, true);

在 jQuery 1.6 中,使用

$(“:checkbox”).attr(“checked”, true);

不会选中复选框,因为需要设置属性,而您设置的只是初始值。

但是,一旦 jQuery 1.6 发布,jQuery 团队意识到设置浏览器仅关心页面加载时设置的内容并没有什么用。因此,为了保持向后兼容性和 .attr() 方法的实用性,我们将继续能够在 jQuery 1.6.1 中使用 .attr() 方法来获取和设置这些布尔属性。

最常见的布尔属性是 checked、selected、disabled 和 readOnly,但以下是 jQuery 1.6.1 支持使用 .attr() 动态获取和设置的完整布尔属性/属性列表

autofocus, autoplay, async, checked, controls, defer, disabled,
hidden, loop, multiple, open, readonly, required, scoped, selected

仍然建议使用 .prop() 设置这些布尔属性/属性,但即使这些用例未切换到使用 .prop() 方法,您的代码在 jQuery 1.6.1 中也将继续工作。

以下是一些属性和属性的列表,以及在获取或设置它们时应通常使用的方法。这是首选用法,但 .attr() 方法在所有属性情况下都将起作用。

请注意,以下还列出了一些 DOM 元素属性 - 但仅适用于新的 .prop() 方法。

属性/属性 .attr() .prop()
accesskey
align
async
autofocus
checked
class
contenteditable
defaultValue
draggable
href
id
label
location *
multiple
nodeName
nodeType
readOnly
rel
selected
selectedIndex
src
style
tabindex
tagName
title
type
width **

* 例如,使用 window.location
** 如果需要超过 .width()

不应使用 .attr().prop() 来获取/设置 value。而是使用 .val() 方法(尽管使用 .attr(“value”, “somevalue”) 将继续工作,就像 1.6 之前一样)。

首选用法摘要

.prop() 方法应用于布尔属性/属性以及 html 中不存在的属性(例如 window.location)。所有其他属性(您可以在 html 中看到的内容)可以并且应该继续使用 .attr() 方法进行操作。

jQuery 1.6.1 更改日志

1.6.1 版本的当前更改日志。

属性

  • #9071:$(‘<option></option>’).val(‘myValue’) 不再设置值
  • #9079:.attr(“selected”) 在 1.6 中返回无用的值
  • #9089:1.6 atrr() 在 IE7,8 中不一致
  • #9094:jQuery 1.6:无法取消选中复选框
  • #9103:.attr(‘foo’, true) 未设置相关的 DOM 属性
  • #9123:生成 input 元素时 attr 方法出现奇怪行为。
  • #9129:jQuery 不支持枚举属性,例如 contenteditable
  • #9191:radio 上的 attr checked 错误

数据

  • #9124:某些情况下 $.data 的更改不合逻辑
  • #9126:jquery 破坏 use strict

Deferred

  • #9104:在 pipe 过滤器函数中返回 null 或 undefined 会导致异常

Effects

  • #9074:无法同时动画 position 和 opacity
  • #9100:hide() 回调的顺序已更改

事件

  • #9069:当鼠标悬停在元素的子元素上时,使用 live 或 delegate 会触发 mouseleave

操作

  • #9072:jQuery 1.6 崩溃 IE 6
  • #9221:Javascript 在 AJAX 中加载失败,在 IE 中 - 错误 80020101

队列

  • #9147:promise 中的变量 tmp 是否隐式声明?

选择器

  • #7341:IE 中 .add() 速度慢
  • #9096:jQuery 1.6 中的选择器或查找错误
  • #9154::reset 伪选择器已损坏

支持

  • #8763:未处理的异常:document.defaultView.getComputedStyle(div, null) 为 null (FF, 隐藏的 iframe)
  • #9109:support.boxModel 现在在 IE6 中为 false,即使不在怪异模式下

jQuery 1.6.1 RC 1 发布

发布于 作者

我们正在接近 jQuery 1.6 的首次更新 - 我们很高兴地宣布发布第一个发布候选版本!除非出现重大错误,否则这将是我们为 jQuery 1.6.1 发布的代码(本周将发布)。

您可以从 jQuery CDN 获取代码

您可以帮助我们,将这些代码放入您现有的应用程序中,并告知我们是否有任何不再起作用的地方。请 提交错误报告,并确保说明您正在使用 jQuery 1.6.1 RC 1 进行测试。

我们希望鼓励社区中的每个人尝试 参与 jQuery 核心的贡献。我们已经建立了一个 完整页面,专门介绍如何更多地参与团队工作。团队随时准备帮助您帮助我们!

从 1.5.2 升级到 1.6.1

随着新的 .prop() 方法的引入以及对 .attr() 方法的更改,jQuery 1.6 引起了关于属性和属性之间的区别以及它们如何相互关联的讨论。它还带来了一些向后兼容性问题,这些问题已在 1.6.1 中得到解决。从 1.5.2 升级到 1.6.1 时,您无需更改任何代码。

以下是 jQuery 1.6 和 1.6.1 中属性模块的更改描述,以及 .attr() 方法和 .prop() 方法的首选用法。但是,如前所述,jQuery 1.6.1 将允许您像以前一样在所有情况下使用 .attr()

发生了什么变化

属性模块的更改消除了属性和属性之间的歧义,但导致了 jQuery 社区的一些困惑,因为 jQuery 1.6 之前的版本都使用一种方法 (.attr()) 处理属性和属性。旧的 .attr() 方法有很多错误并且难以维护。

jQuery 1.6.1 包含几个错误修复以及对属性模块的更新。

具体来说,在 1.6.1 中,诸如 checked、selected、readonly 和 disabled 等布尔属性将像在 jQuery 1.6 之前的版本中那样处理。这意味着像这样的代码

$(“:checkbox”).attr(“checked”, true);
$(“option”).attr(“selected”, true);
$(“input”).attr(“readonly”, true);
$(“input”).attr(“disabled”, true);

甚至

if ( $(“:checkbox”).attr(“checked”) ) { /* Do something */ }

在 1.6.1 中无需更改即可像以前一样工作。

为了使 jQuery 1.6 中 .attr() 的更改清晰明了,以下是一些在以前版本的 jQuery 中有效但应切换到使用 .prop().attr() 用例示例

.attr() 正确的 .prop() 用法
$(window).attr… $(window).prop…
$(document).attr… $(document).prop…
$(“:checkbox”).attr(“checked”, true); $(“:checkbox”).prop(“checked”, true);
$(“option”).attr(“selected”, true); $(“option”).prop(“selected”, true);

首先,在 jQuery 1.6 中,对 window 或 document 使用 .attr() 方法不起作用,因为 window 和 document 不能具有属性。它们包含属性(例如 location 或 readyState),应该使用 .prop() 或直接使用原始 javascript 进行操作。在 jQuery 1.6.1 中,.attr() 将为 window 和 document 委派 .prop() 方法,而不是抛出错误。

其次,由于这些属性与其对应的属性之间的特殊关系,checked、selected 和其他之前提到的布尔属性正在接受特殊处理。基本上,属性是您在 html 中看到的内容

<input type=”checkbox” checked=”checked”>

诸如 checked 的布尔属性仅设置默认或初始值。对于复选框,checked 属性设置页面加载时复选框是否应被选中。

属性是浏览器用于跟踪当前值的方式。通常,属性会反映其对应的属性(如果存在)。布尔属性并非如此。布尔属性会保持最新状态,当用户单击复选框或在 select 元素中选择一个选项时。相应的布尔属性不会。如上所述,它们仅由浏览器用于存储初始值。

$(“:checkbox”).get(0).checked = true;
// Is the same as $(":checkbox:first").prop(“checked”, true);

在 jQuery 1.6 中,使用

$(“:checkbox”).attr(“checked”, true);

不会选中复选框,因为需要设置属性,而您设置的只是初始值。

但是,一旦 jQuery 1.6 发布,jQuery 团队意识到设置浏览器仅关心页面加载时设置的内容并没有什么用。因此,为了保持向后兼容性和 .attr() 方法的实用性,我们将继续能够在 jQuery 1.6.1 中使用 .attr() 方法来获取和设置这些布尔属性。

最常见的布尔属性是 checked、selected、disabled 和 readOnly,但以下是 jQuery 1.6.1 支持使用 .attr() 动态获取和设置的完整布尔属性/属性列表

autofocus, autoplay, async, checked, controls, defer, disabled,
hidden, loop, multiple, open, readonly, required, scoped, selected

仍然建议使用 .prop() 设置这些布尔属性/属性,但即使这些用例未切换到使用 .prop() 方法,您的代码在 jQuery 1.6.1 中也将继续工作。

以下是一些属性和属性的列表,以及在获取或设置它们时应通常使用的方法。这是首选用法,但 .attr() 方法在所有情况下都将起作用。

属性/属性 .attr() .prop()
accesskey
align
async
autofocus
checked
class
contenteditable
draggable
href
id
label
location(例如 window.location)
multiple
readOnly
rel
selected
src
tabindex
title
type
width(如果需要超过 .width()

不应使用 .attr().prop() 来获取/设置 value。而是使用 .val() 方法(尽管使用 .attr(“value”, “somevalue”) 将继续工作,就像 1.6 之前一样)。

首选用法摘要

.prop() 方法应用于布尔属性/属性以及 html 中不存在的属性(例如 window.location)。所有其他属性(您可以在 html 中看到的内容)可以并且应该继续使用 .attr() 方法进行操作。

jQuery 1.6.1 RC 1 更改日志

1.6.1 RC 1 版本的当前更改日志。

属性

  • #9079:.attr(“selected”) 在 1.6 中返回无用的值
  • #9089:1.6 atrr() 在 IE7,8 中不一致
  • #9094:jQuery 1.6:无法取消选中复选框
  • #9103:.attr(‘foo’, true) 未设置相关的 DOM 属性
  • #9123:生成 input 元素时 attr 方法出现奇怪行为。
  • #9129:jQuery 不支持枚举属性,例如 contenteditable
  • #9191:radio 上的 attr checked 错误

数据

  • #9124:某些情况下 $.data 的更改不合逻辑
  • #9126:jquery 破坏 use strict

Deferred

  • #9104:在 pipe 过滤器函数中返回 null 或 undefined 会导致异常

Effects

  • #9074:无法同时动画 position 和 opacity
  • #9100:hide() 回调的顺序已更改

事件

  • #9069:当鼠标悬停在元素的子元素上时,使用 live 或 delegate 会触发 mouseleave

操作

  • #9072:jQuery 1.6 崩溃 IE 6

队列

  • #9147:promise 中的变量 tmp 是否隐式声明?

选择器

  • #7341:IE 中 .add() 速度慢
  • #9096:jQuery 1.6 中的选择器或查找错误
  • #9154::reset 伪选择器已损坏

支持

  • #8763:未处理的异常:document.defaultView.getComputedStyle(div, null) 为 null (FF, 隐藏的 iframe)
  • #9109:support.boxModel 现在在 IE6 中为 false,即使不在怪异模式下

jQuery 1.6 发布

发布于 作者

jQuery 1.6 现在已经发布并可供使用!我们为这个版本感到自豪,它包括属性模块的重大重写以及许多性能改进。

请借此机会感谢 jQuery 团队jQuery bug triage 团队 在发布这个版本中所提供的帮助。

您可以从 jQuery CDN 获取代码

您也可以从其他 CDN 获取代码

我们希望鼓励社区中的每个人尝试 参与 jQuery 核心的贡献。我们已经建立了一个 完整页面,专门介绍如何更多地参与团队工作。团队随时准备帮助您帮助我们!

事实上,我们已经开始着手 jQuery 1.7 的开发。我们欢迎 jQuery 1.7 的功能建议。如果您有任何建议,请使用上述表格提交。

jQuery 1.6 变更日志

此版本中发生的所有 API 更改都可以在 jQuery API 文档中找到
https://api.jquery.org.cn/category/version/1.6/

破坏性更改

在大多数版本中,我们都尝试保持与现有代码的兼容性。但是,在某些情况下,jQuery 1.6 可能需要更改现有代码

data- 属性的大小写映射

jQuery 1.5 在 .data() 方法中引入了一项功能,可以自动导入设置在元素上的任何 data- 属性,并使用 JSON 语义将它们转换为 JavaScript 值。在 jQuery 1.6 中,我们已更新此功能以符合 W3C HTML5 规范,关于包含破折号的数据属性的驼峰命名规则。因此,例如,在 jQuery 1.5.2 中,属性 data-max-value="15" 将创建一个数据对象 { max-value: 15 },但从 jQuery 1.6 开始,它设置为 { maxValue: 15 }

.prop().removeProp().attr()

在 1.6 版本中,我们将 DOM 属性和 DOM 属性的处理分离到单独的方法中。新的 .prop() 方法设置或获取 DOM 元素的属性,而 .removeProp() 删除属性。过去,jQuery 没有明确区分属性和属性。通常,DOM 属性表示从文档中检索到的 DOM 信息的状态,例如标记 <input type="text" value="abc"> 中的 value 属性。DOM 属性表示文档的动态状态;例如,如果用户单击上面的输入元素并键入 def,则 .prop("value")abcdef,但 .attr("value") 仍然是 abc

在大多数情况下,浏览器将属性值视为属性的起始值,但布尔属性(如 checkeddisabled)具有不寻常的语义。

例如,考虑标记 <input type="checkbox" checked>checked 属性的存在意味着 DOM .checked 属性为 true,即使该属性没有值。在上面的代码中,checked 属性值是一个空字符串(或者如果没有指定属性则为 undefined),但 checked 属性值为 true

在 jQuery 1.6 之前,.attr("checked") 返回布尔属性值 (true),但从 jQuery 1.6 开始,它返回属性的实际值(一个空字符串),该值在用户单击复选框更改其状态时不会更改。

有几种替代方法可以检查复选框的当前选中状态。最好和性能最高的是在事件处理程序中使用 DOM 属性直接使用,例如 this.checked,当 this 引用单击的元素时。在代码中使用 jQuery 1.6 或更高版本时,新的方法 $(this).prop("checked") 检索与 this.checked 相同的值,并且相对较快。最后,表达式 $(this).is(":checked") 适用于所有版本的 jQuery。

Ajax

已修复的错误

  • #6481:revert $.param 应该将空数组/对象视为空字符串
  • #7881:使其与 XHR 2 兼容
  • #8417:发布 AJAX 数据时,包含“??” 的数据格式化为 jQuery<timestamp>?
  • #8744:.ajax() jsonp 请求在超时时未正确处理
  • #8884:jqXHR 破坏自定义标头字段的名称

属性

性能改进

jQuery 1.6 .attr("value")

jQuery 1.6 .attr("name", "value")

jQuery 1.6 .val() (get)

测试和数据

.prop().removeProp().attr()

(请参阅“破坏性更改”部分中对更改的描述,上面)

布尔属性

在 jQuery 1.6 中,可以通过将 truefalse 传递给 .attr() 来切换布尔属性(例如 selected、checked 等),以添加或删除它们。例如

$("#checkbox").attr("checked", true); // Checks it
$("#checkbox").attr("checked", false); // Unchecks it

.attr() 和 .val() 的可扩展性

为了更容易地为特定属性(jQuery.attrHooks)或表单输入值(jQuery.valHooks)添加特殊处理,添加了两个新的钩子。

例如

jQuery.attrHooks.selected = {
	set: function( elem, value ) {
		if ( value === false ) {
			jQuery.removeAttr(elem, “selected”);
			return value;
		}
	}
};

这两个钩子的行为与 jQuery 内置的 CSS 钩子非常相似(允许您指定属性(或值)的获取或设置方法来处理这些特定情况)。

已修复的错误

  • #1591:IE “Invalid Argument” $(‘table’).attr(‘non-existent’)
  • #3116:.attr 不适用于 SVG IDL
  • #3786:removeAttr 应该使用 jQuery.props
  • #4283:.attr(‘checked’) & XHTML 1.1 Strict
  • #4464:IE 无法获取分离的 IMG 元素的宽度属性
  • #4978:jQuery.prop 缺少 cellpadding?
  • #5413:tag “img” width/height 属性为零 (IE)
  • #6562:使用 .attr() 设置具有 ID 为 ‘target’ 的节点的 ‘target’ 属性
  • #6708:Opera 对 usemap 属性值的结果不一致
  • #6823:使 .val(value) 对于常见用例更快
  • #7472:$(‘form’).attr(‘id’) 返回 DOM 元素
  • #7485:has [attribute] 选择器和 attr() 方法之间存在不一致
  • #7709:禁止访问非 Chrome Firefox/3.5.15 的 ‘nodeType’ 属性
  • #7996:Safari $(‘script’).attr(‘event’); 错误
  • #8117:.removeAttr 不适用于 select 元素的 size 属性
  • #8150:webkit 和 firefox 中的 removeAttr 问题
  • #8255:支持 list 属性
  • #8418:在 IE 7 中使用 attr() 方法设置 name 参数
  • #8457:attrHooks
  • #8570:.val 方法在动态创建的 IE9 无效的单选按钮时返回“on”
  • #8699:.attr() 返回未找到属性时返回 -1
  • #8772:使用 .attr() 设置输入类型 ‘range’ 会导致 IE9 脚本错误
  • #8997:新的属性“form”(HTML5)不受支持,.attr(‘form’) 无法正常工作
  • #9037:$(‘blah’).attr(‘onclick’) 在 Firefox 中返回事件

构建

已修复的错误

  • #8854:minifier 过程中的错误

核心

jQuery.map( Object )

现在可以使用 jQuery.map 方法映射 JavaScript 对象的属性。例如

var counts = { first: 1, second: 2 };
	
counts = jQuery.map( counts, function( value ) {
	return value++;
});

已修复的错误

  • #2616:更好的 jQuery.map
  • #4366:$.each 在 IE 中使用 document.styleSheets 时失败
  • #6690:存储 location 和 navigator 对象的引用
  • #7049:使 jQuery.noConflict() 随时可用
  • #7783:修复 $.proxy 以像 (并使用) Function.prototype.bind 一样工作
  • #7862:jQuery.globalEval(): Firefox 中远程脚本延迟执行
  • #7990:在 Firefox 中使用 jQuery 构造函数创建大型 HTML 块时出现脚本空间配额耗尽错误
  • #8893:jQuery.proxy( context, name ) 在 1.6b1 中的错误
  • #8984:jQuery 无法正确解析字符串中的 html!
  • #8993:jQuery.map( emptyNodeList ) 枚举属性。

CSS

相对 CSS

我们移植了 .animate() 方法中的功能,使您能够使用相对值更新 CSS 属性。现在,您可以通过在 CSS 值前加上“+=”或“-=”来相对于当前值更新属性。

// Move an item 10px over
$("#item").css("left", "+=10px");

已修复的错误

  • #6135:jQuery 尝试访问文本标签的 .style 属性
  • #7345:支持相对值用于 $().css()
  • #7730:offset.js: setOffset 使用 parseInt 解析 css 值,这些值可能包含浮点数
  • #8401:opacity cssHooks 的小改进
  • #8402:jQuery.cssProps 在所有浏览器中都无用,除非 IE6/7/8
  • #8403:jQuery 覆盖其他 IE 过滤器时分配不透明度

数据

性能改进

通过改进事件触发的性能,实现了对 .data() 的大量性能改进。jQuery 的 .data() 方法触发 getData 和 setData 事件,这些事件允许插件具有更大的可扩展性,从而改进了它们的触发方式,使 .data() 变得更快。

jQuery 1.6 .data() (get and set)

测试和数据

已修复的错误

  • #7328:应该可以通过 .data( ‘fooBar’ ) 以及 .data( ‘foo-bar’ ) 访问 data-foo-bar

Deferreds

deferred.always()

在 1.5 中,如果您想采取完全相同的操作,无论 deferred 是 resolved 还是 rejected,您都必须使用命名函数并将其传递给 “then” 两次

function callback() {
    // the deferred has been resolved or rejected
}

defer.then( callback, callback );

使用 “always”,您可以内联完成它

defer.always(function() {
    // the deferred has been resolved or rejected
});

deferred.pipe()

链接异步任务可能很繁琐,特别是当您想要为整个链返回一个 Promise 时

function chainedAjax( url ) {
    return $.Deferred(function( defer ) {
        $.ajax( url ).then( function( url2 ) {
            $.ajax( url2 ).then( defer.resolve, defer.reject )
        }, defer.reject ).promise();
    });
}

使用 “pipe”,一切都更加可读和自然

function chainedAjax( url ) {
    return $.ajax( url ).pipe(function( url2 ) {
        return $.ajax( url2 );
    });
}

它还可以用于过滤 resolve 和/或 rejection 值

var request = $.ajax( url ).pipe(function( data ) {
   return data.value;
});

request.done(function( value ) {
    // we get the value field of the original response
});

Effects

同步动画

在 jQuery 中,您可以同时运行多个动画(甚至在同一个元素上,为不同的属性设置动画)。在 1.6 中,我们引入了一项增强功能,可确保所有动画都同步到相同的计时器间隔。在此之前,这可能会导致问题,因为动画可能会略微不同步(即使是几毫秒),从而导致动画略微“失调”。

更流畅的动画

此外,jQuery 现在使用浏览器提供的新的 requestAnimationFrame 方法来使我们的动画更加流畅。我们可以使用此功能来避免调用计时器,而是依赖浏览器提供最佳的动画体验。

.promise()

就像之前的 $.ajax() 一样,$.animate() 获得了 “deferred”。jQuery 对象现在可以返回一个 Promise 来观察集合上的所有动画何时完成

$(".elements").fadeOut();

$.when( $(".elements") ).done(function( elements ) {
    // all elements faded out
});

已修复的错误

  • #7917:在使用大量元素时,.animate() 动画没有“同步”
  • #7934:为 $.fn.animate 实现 deferreds(延迟对象)
  • #7974:清理 effects.js 文件以提高性能并减少文件大小
  • #8099:SPAN 元素在 show() 显示时变为块级元素
  • #8101:在可用时,使用 requestAnimationFrame 代替 setInterval 进行动画

事件

性能改进

(正如在讨论 .data() 性能时提到的,事件触发的性能得到了改进。)

jQuery.holdReady()

jQuery 提供了一种机制来延迟 ready 事件的执行(主要针对插件作者)。此机制的 API 在 1.6 中得到了改进,从而产生一个简单的方法

jQuery.holdReady( true ); // Pause execution of ready event
// later...
jQuery.holdReady( false ); // Resume execution

已修复的错误

  • #5884:嵌套时 live mouseenter/mouseleave 事件无法按预期触发
  • #6514:mouseenter 和 mouseleave 事件无法通过 live 绑定触发
  • #6913:命名空间事件冒泡错误
  • #6993:.bind() 和 .one() 不允许将函数作为数据
  • #7071:在 IE 中访问 VML 元素的 ‘type’ 属性失败
  • #7883:.delegate(和 .live)应该接受 false 作为 fn 参数,就像 .bind 一样
  • #8018:对跨域 (i)frame 的 frameElement 的不安全访问导致错误
  • #8272:jQuery 吞没了纯 JS 对象事件处理程序中的异常
  • #8712:自定义事件不会冒泡到 window
  • #8732:IE9 focusin/focusout 的特征检测不正确
  • #8753:jQuery 1.6:jQuery.Event 构造函数支持设置属性
  • #8755:在 IE6、7、8 上页面卸载时绑定到 beforeunload 会引发错误
  • #8777:jQuery 1.6:undelegate() 接受自定义命名空间事件
  • #8788:重组 jQuery.event.trigger 以使用循环代替递归
  • #8790:优化非附加事件,例如数据事件
  • #8803:jQuery.holdReady() 方法

操作

已修复的错误

  • #1954:val() 在 IE 中返回按钮元素的 innerHTML
  • #6180:jQuery.clean 不应触碰非 text/javascript 类型的 script 标签
  • #7623:replaceWith 中抛出异常
  • #7885:jQuery .offset 在当前偏移量为浮点数时无法正常工作(在 Firefox 中是可能的)
  • #8060:在断开连接的复选框上设置 checked 为 true,在附加到 DOM 后不会保留
  • #8500:单选按钮和复选框在 IE 中包装后会恢复到默认(HTML)状态

其他

已修复的错误

  • #8203:删除不必要的“someVar = null;”
  • #8851:在源代码和测试中用双引号包装字符串
  • #8882:测试:更新 QUnit 用法,将 id=main 替换为 id=qunit-fixture

Offset

已修复的错误

  • #7931:scrollTop 和 scrollLeft setter 在对空 jQuery 对象调用时返回 null

选择器

:focus 选择器

在 jQuery 1.6 中,我们现在确保 :focus 选择器在所有浏览器中都能正常工作。您可以使用此选择器来查找页面上当前聚焦的元素(例如表单输入)。

$("input:focus").addClass("active");
  • #3685:选择器在具有名为“name”的元素的表单上失败
  • #4321:$(“#”) 返回 undefined
  • #8105::focus 选择器过滤器

支持

已修复的错误

  • #9028:IE8 在加载 1.6rc1 时,如果使用 body 背景图像会崩溃

Traversing

find()closest()is() 现在都接受 DOM 元素和 jQuery 对象

在 jQuery 1.6 中,我们确保 find()closest()is() 都可以接受 DOM 元素和 jQuery 对象作为参数。这为您提供了基于传入元素过滤元素集的替代方案。

// Only returns .test elements if they're inside of a div
$("div").find( $(".test") )

已修复的错误

  • #2773:$.fn.is 和 $.fn.not 应该接受 DOM 元素和 jQuery 集合
  • #5712:允许 jQuery.fn.is 接受一个函数
  • #6912:$().add(selectElement) 添加 option 子元素而不是
  • #7369:$(‘<div>ff</div>’).closest(‘[attr]’); 在所有浏览器中引发异常
  • #8609:.find(” “) 的结果是 undefined