我正在使用IE8进行测试。我刚刚将jQuery从v1.5.2升级到v1.6.1,现在数据方法无效。
该行看起来像这样:
<tr class="ui-widget-content alt" nodeIndex="2" data-DocAttributeFieldType="TextBox" data-DocClassAttributeFieldId="60777" jQuery16106588245076914028="66">
这有效:
$("#docClassAttributeFields tbody tr:first").attr("data-DocClassAttributeFieldId");
这不起作用:
$("#docClassAttributeFields tbody tr:first").data("DocClassAttributeFieldId");
它有错误吗?
这是一个例子。在1.5.2和1.6中运行它以查看它们如何以不同的方式运行... http://jsfiddle.net/5hbKX/
答案 0 :(得分:16)
来自docs (我怀疑1.6中提到的更改是罪魁祸首 - 您是否尝试删除案例,请查看lastValue示例?):
HTML 5数据 - 属性
从jQuery 1.4.3开始HTML 5 data- attributes 将被自动拉入 jQuery的数据对象。治疗 嵌入破折号的属性是 在jQuery 1.6中更改为符合 W3C HTML5 specification。
例如,给定以下HTML:
<div data-role="page" data-last-value="43" data-hidden="true" data-options='{"name":"John"}'></div>
以下所有jQuery代码都将 工作
$("div").data("role") === "page"; $("div").data("lastValue") === 43; $("div").data("hidden") === true; $("div").data("options").name === "John";
每次尝试都要转换 字符串到JavaScript值(这个 包括布尔,数字,对象, 数组,并且null)否则它被留下 作为一个字符串。要检索值 属性为没有任何字符串 尝试转换它,使用attr() 方法。当data属性是 object(以'{')或数组开头 (以'[')开头 jQuery.parseJSON用于解析 串;它必须遵循有效的JSON 语法包括quoted属性 名。拉取数据属性 在第一次data属性 访问,然后不再 访问或变异(所有数据值 然后在内部存储在jQuery中。
来自上述HTML5 specification:
自定义数据属性是一个 没有命名空间的属性,其名称 以字符串“data-”开头,at at 连字符后至少有一个字符, 是XML兼容的,并且不包含 字符串在U + 0041到 U + 005A(拉丁文大写字母A至 拉丁文大写字母Z)。
HTML元素的所有属性 HTML文档得到ASCII-lowercased 自动,所以限制 ASCII大写字母不影响 这样的文件。