我们很高兴地宣布 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 社区出现了一些混淆,因为 1.6 之前的 jQuery 所有版本都在一个方法 (.attr()
) 中处理属性和特性。旧的 .attr()
方法存在很多错误,难以维护。
jQuery 1.6.1 包含几个错误修复,以及对属性模块的更新。
具体而言,在 1.6.1 中,诸如 checked、selected、readonly 和 disabled 之类的布尔属性将像在 1.6 之前的 jQuery 版本中一样处理。这意味着以下代码
$(“: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 属性设置页面加载时复选框是否应被选中。
特性是浏览器用来跟踪**当前**值的。通常,特性会反映其对应的属性(如果存在)。对于布尔属性来说,情况并非如此。当用户单击复选框或在选择元素中选择选项时,布尔特性会保持最新状态。相应的布尔属性不会。如上所述,它们仅由浏览器用于存储初始值。
$(“:checkbox”).get(0).checked = true;
// Is the same as $(":checkbox:first").prop(“checked”, true);
在 jQuery 1.6 中,使用
$(“:checkbox”).attr(“checked”, true);
设置 checked 不会选中复选框,因为需要设置的是特性,而您设置的只是初始值。
但是,在 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()
对于获取/设置value,不应使用 .attr()
或 .prop()
。请改用 .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: 生成输入元素时 attr 方法出现奇怪的行为。
- #9129: jQuery 不支持诸如 contenteditable 之类的枚举属性
- #9191: 关于单选按钮的 attr checked 错误
数据
- #9124: $.data 的更改在某些情况下不合理
- #9126: jquery 在使用 strict 时崩溃
延迟
- #9104: 在管道过滤器函数中返回 null 或 undefined 会导致异常
效果
事件
- #9069: 当鼠标悬停在元素的子元素上时,使用 live 或 delegate 时会触发 mouseleave
操作
- #9072: jQuery 1.6 使 IE 6 崩溃
- #9221: AJAX 中的 JavaScript 无法在 IE 中加载 - 错误 80020101
队列
- #9147: promise 中的变量 tmp 是隐式声明的吗?
选择器
支持
- #8763: 未处理的异常:document.defaultView.getComputedStyle(div, null) 为 null (FF,隐藏的 iframe)
- #9109: 即使不在怪癖模式下,support.boxModel 在 IE6 中也为 false