【问题标题】:jQuery .data() not retrieving data-*jQuery .data() 不检索数据-*
【发布时间】:2011-06-28 16:29:27
【问题描述】:

我正在使用 IE8 进行测试。我刚刚将 jQuery 从 v1.5.2 升级到 v1.6.1,现在 data 方法不起作用。

该行如下所示:

<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");

里面有bug吗?

这是一个例子。在 1.5.2 和 1.6 中运行它,看看它们的行为有何不同...... http://jsfiddle.net/5hbKX/

【问题讨论】:

    标签: jquery html internet-explorer-8


    【解决方案1】:

    来自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() 方法。当数据属性是 对象(以'{'开头)或数组 (以'['开头)然后 jQuery.parseJSON 用于解析 细绳;它必须遵循有效的 JSON 包括引用属性的语法 名字。数据属性被拉出 在第一次数据属性是 访问,然后不再 访问或变异(所有数据值 然后存储在 jQuery 内部)。

    来自以上HTML5 specification

    自定义数据属性是 没有名称空间中的属性 以字符串“data-”开头,在 连字符后至少一个字符, 与 XML 兼容,并且不包含 U+0041 到范围内的字符 U+005A(拉丁文大写字母 A 至 拉丁文大写字母 Z)。

    HTML 元素的所有属性 HTML 文档被 ASCII 小写 自动,所以限制 ASCII 大写字母不影响 此类文件。

    【讨论】:

    • 我想就是这样。更改为小写已修复:jsfiddle.net/5hbKX/1 那种臭味,可读性要差得多: .data("docclassattributefieldid") vs .data("DocClassAttributeFieldId")
    • 有趣的附注,如果您在 Firebug (FF) 和 Firebug-lite (IE) 中查看源代码,则 data-* 是小写的,但在 IE Developer Tools 中查看它是大小写混合的。跨度>
    • 如果不允许使用大写字母,请改用连字符来连接单词。
    • 好的,这增加了一点混乱,如果有连字符,大写字母就可以了。所以 .data("id-D") 有效, .data("idB") 不... jsfiddle.net/5hbKX/2
    • 现在我明白了... 3。对于列表中的每个名称,名称中的每个 U+002D 连字符减号字符 (-) 后跟 U+0061 到 U+007A 范围内的字符(U+0061 拉丁小写字母 A 到 U+007A LATIN SMALL LETTER Z),删除 U+002D HYPHEN-MINUS 字符 (-) 并将其后的字符替换为 转换为 ASCII 大写的相同字符。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-24
    • 2013-05-21
    相关资源
    最近更新 更多