jQuery 1.6.4 发布

发布日期: 作者:

jQuery 1.6.4 发布

这是一个 jQuery 的小版本更新。我们发布它是为了修复在 jQuery 1.6.3 发布期间出现的一些问题。

您可以从 jQuery CDN 获取代码

您可以通过将该代码放入您的现有应用程序中并告诉我们是否有任何不再工作来帮助我们。请 提交错误 并确保提到您正在针对 jQuery 1.6.4 进行测试。

我们希望鼓励社区中的每个人尝试并 参与 回馈 jQuery 核心。我们已经设置了一个 完整页面 的信息,专门用于参与到团队中。团队在这里,随时准备帮助你帮助我们!

jQuery 1.6.4 变更日志

1.6.4 版本的当前变更日志。

数据

  • #10194: 具有单破折号包围字母的数据属性名称无法通过驼峰命名法访问

事件

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

支持

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

jQuery 1.6.4 RC1 发布

发布日期: 作者:

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

您可以通过包含以下两个文件(一个最小化,一个未压缩)来进行测试。如果您发现与 1.6.3 任何重要的差异,请尽快 提交错误 并确保提到您正在针对 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 并非有用的错误报告!

jQuery 1.6.3 发布

发布日期: 作者:

jQuery 1.6.3 现已发布!这是基于 jQuery 1.6 的第三个小版本更新,并修复了许多 bug,如下所示。

像往常一样,我们提供了两个 jQuery 的副本,一个最小化,一个未压缩(用于调试或阅读)。

您可以通过将该代码放入您的现有应用程序中并告诉我们是否有任何不再工作来帮助我们。请 提交错误 并确保提到您正在针对 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: 允许对数据属性值的非空|undefined 评估
  • #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: 在 IE 8 中,当在 BODY 中使用背景图片时,会发生崩溃
  • #9964: test/support.js 模块 strictEqual 拼写错误
  • #10029: $.support.scriptEval 已删除,但仍包含在文档中

如果您发现问题,请尽快按照上述说明提交包含测试用例的错误报告。博客评论或 Twitter 并非有用的错误报告!

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: 允许对数据属性值的非空|undefined 评估
  • #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: 在 IE 8 中,当在 BODY 中使用背景图片时,会发生崩溃
  • #9964: test/support.js 模块 strictEqual 拼写错误
  • #10029: $.support.scriptEval 已删除,但仍包含在文档中

如果您发现问题,请尽快按照上述说明提交包含测试用例的错误报告。博客评论或 Twitter 并非有用的错误报告!

jQuery 1.6.2 发布

发布日期 作者

jQuery 1.6.2 发布

jQuery 1.6.2 现已发布!这是 jQuery 1.6 的第二个次要版本,包含许多错误修复。

像往常一样,我们提供了两个 jQuery 的副本,一个最小化,一个未压缩(用于调试或阅读)。

您可以直接在您的网站中包含以上 URL,并享受快速加载的 jQuery 带来的全部性能优势。

您可以将以上代码添加到您的现有应用程序中,并帮助我们测试是否有任何问题。如果您发现任何问题,请 提交 bug,并确保您提到您正在测试 jQuery 1.6.2。

我们希望鼓励社区中的每个人尝试并 参与 回馈 jQuery 核心。我们已经设置了一个 完整页面 的信息,专门用于参与到团队中。团队在这里,随时准备帮助你帮助我们!

jQuery 1.6.2 变更日志

1.6.2 版本的最新变更日志。

属性

  • #9286: 在表单上使用 live submit
  • #9298: $(elem).attr(eventName) 在 IE7 中无法正常工作
  • #9329: attr(“title”) 在 IE7 中的问题
  • #9362: .attr(“value”) 无法用于 meter 元素
  • #9468: $(‘form’).attr(‘class’) 在 IE 6 中始终返回 undefined
  • #9499: removeClass 仅移除类名的第一个实例

核心

  • #9301: 使用包含带连字符键的对象设置 data() 会导致数据无法访问。
  • #9368: jQuery.camelCase() 定义在 css.js 中,但被更广泛地使用
  • #9471: 加载 jquey.1.6.1.min.js 包含在 iframe 中的 html 页面时发现内存泄漏

CSS

  • #7557: outerWidth()
  • #9237: .css() 无法使用带连字符属性的相对值

尺寸

  • #9300: outerWidth(true) 问题

效果

  • #9220: 动画回调在下一个队列函数执行**之后**触发。
  • #9678: setInterval 被动画清除

事件

操作

  • #8950: (Chrome, Firefox) 在 jQuery 中创建 <input> 时,第二个参数(事件为空)会抛出错误
  • #9370: jQuery 1.6 和 IE6 的兼容性问题

支持

  • #9239: 1.6.0 版本破坏了 body 元素的背景行为
  • #9440: v1.6.1 在 IE8 中破坏了布局

jQuery 大会波士顿站报名现已开放!

发布日期 作者

大家好!

我们最近宣布了下一届 jQuery 大会的日期——2011 年 10 月 1 日和 2 日,在美国马萨诸塞州波士顿举行——现在我们终于可以 开放报名 了!以下是一些重点信息:

  • 两天时间,从 jQuery 核心团队和社区顶级成员那里学习丰富的内容,涵盖从 jQuery 基础知识和高级技巧,到 jQuery UI、jQuery Mobile 等等。
  • 限量版 jQuery T 恤和其他 jQuery 周边产品
  • 由我们的朋友 MediaTemple 主办的波士顿精彩派对,提供免费酒水、零食、与志同道合的人交谈等等
  • 其他精彩的晚间活动,敬请期待即将发布的公告

应大家要求,我们还将提供 为期一天的 jQuery 初学者培训,为您的团队中的新手提供帮助,由我们的朋友 Bocoup 提供。我们可能会增加更多主题或高级培训课程,敬请关注此处和 Twitter 获取公告和更新。

今年的新增内容:我们首次拥有 官方 jQuery 大会酒店。过去我们推荐过几家酒店,但今年我们已在**会议场地**预订了大量的房间,安排核心团队和演讲者入住,还为酒店客人提供了一些专属福利,例如优先注册和周边产品领取。我们还将在酒店组织一些现场的晚间活动,酒店客人可以优先注册这些活动。

我们去年预订的房间——没有这些额外福利——在大会开始之前就售罄了,所以请尽快预订房间,并确保您预订的是我们指定的房间。

我们仍然在接受 演讲征集,如果您还没有提交您的演讲,请尽快提交。演讲者将获得参加精彩的演讲者感谢晚宴的机会,可以在会议酒店享受免费住宿,如果预算允许,还会获得其他 TBD 酬劳。

以上是目前的信息;我们将在发布演讲阵容、宣布更多派对细节以及最终确定所有其他与大会相关的内容时发布更多公告。

立即报名!


jQuery 大会 2011: 波士顿站大会日期

发布日期 作者

我们很高兴地宣布 2011 年波士顿 jQuery 大会 的日期和地点。我们将在 2011 年 10 月 1 日至 2 日,在美国马萨诸塞州剑桥的 Royal Sonesta 酒店举办我们一年一度的波士顿大会。

演讲征集

我们正式开启 演讲征集。如果您想在大会上演讲,主题包括 jQuery、JavaScript、HTML5、CSS3 或通用前端开发,请在 截止日期 7 月 15 日之前提交您的演讲提议。我们将在截止日期后一周内通知、确认和公布演讲者名单。

报名

我们很快将开放报名。您可以填写 活动主页上的表格,并在门票可用时立即收到通知。

酒店

我们与 Royal Sonesta 酒店 合作,为大会预订了大量的房间。Royal Sonesta 酒店提供 273.53 美元/晚的优惠房价(含税)。如果您通过电话预订,请告知酒店您是参加 jQuery 大会,以便获得优惠价。您也可以 在线预订房间。请使用 活动网站酒店页面 上的编码网站链接,确保您获得优惠价。

更多信息

如果您或您的公司有兴趣赞助此活动,请 联系我们 以获取更多信息。

我们知道,不幸的是,今年的波士顿大会与JSConf.eu 冲突。我们考虑了很多日期,但最终只能选择 1 日和 2 日。如果您因此而无法参加,我们深感抱歉,并希望您能在周末享受大西洋两岸的 JavaScript 盛宴。

jQuery 1.6.2 RC 1 版本发布

发布日期 作者

这是一个 jQuery 预览版本。我们发布它是为了让每个人都可以在自己的应用程序中开始测试代码,确保没有重大问题。

您可以从 jQuery CDN 获取代码

您可以将以上代码添加到您的现有应用程序中,并帮助我们测试是否有任何问题。如果您发现任何问题,请 提交 bug,并确保您提到您正在测试 jQuery 1.6.2 RC 1。

我们希望鼓励社区中的每个人尝试并 参与 回馈 jQuery 核心。我们已经设置了一个 完整页面 的信息,专门用于参与到团队中。团队在这里,随时准备帮助你帮助我们!

jQuery 1.6.2 RC 1 变更日志

1.6.2 RC 1 版本的最新变更日志。

属性

  • #9286: 在表单上使用 live submit
  • #9298: $(elem).attr(eventName) 在 IE7 中无法正常工作
  • #9329: attr(“title”) 在 IE7 中的问题
  • #9362: .attr(“value”) 无法用于 meter 元素
  • #9468: $(‘form’).attr(‘class’) 在 IE 6 中始终返回 undefined
  • #9499: removeClass 仅移除类名的第一个实例

核心

  • #9301: 使用包含带连字符键的对象设置 data() 会导致数据无法访问。
  • #9368: jQuery.camelCase() 定义在 css.js 中,但被更广泛地使用
  • #9471: 加载 jquey.1.6.1.min.js 包含在 iframe 中的 html 页面时发现内存泄漏

Css

  • #7557: outerWidth()
  • #9237: .css() 无法使用带连字符属性的相对值

尺寸

  • #9300: outerWidth(true) 问题

效果

  • #9220: 动画回调在下一个队列函数执行**之后**触发。

事件

操作

  • #8950: (Chrome, Firefox) 在 jQuery 中创建 <input> 时,第二个参数(事件为空)会抛出错误
  • #9370: jQuery 1.6 和 IE6 的兼容性问题

支持

  • #9239: 1.6.0 版本破坏了 body 元素的背景行为
  • #9440: v1.6.1 在 IE8 中破坏了布局

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 社区出现了一些混淆,因为 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 会导致异常

效果

  • #9074: 无法同时动画位置和不透明度
  • #9100: hide() 回调的顺序已更改

事件

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

操作

  • #9072: jQuery 1.6 使 IE 6 崩溃
  • #9221: AJAX 中的 JavaScript 无法在 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