5

Is it expected that for

<div data-foo-42="bar"></div>

div the div.data() would be an empty object?

Demo: http://jsfiddle.net/nWCKt/

What are the requirements for data- attributes names?

Created a ticket in jquery bug tracker: http://bugs.jquery.com/ticket/14376

4

1 回答 1

4

对我来说似乎是一个 jquery 问题。当属性的连字符分隔符后有一个数值时,替换 key 的正则表达式会导致问题(除了第一个连字符之外data-)。他们需要一种方法来识别在多划线数据属性的属性之后开始的数值。

来自 jquery 的片段:

function dataAttr( elem, key, data ) {
    // If nothing was found internally, try to fetch any
    // data from the HTML5 data-* attribute
    if ( data === undefined && elem.nodeType === 1 ) {

        var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase(); 

        data = elem.getAttribute( name );

         ....

另一个将数据属性名称转换为上述位置中使用的键,该键实际上将键转换为 camelcase rdashAlpha = -([\da-z]),第二个替换 ( .replace( rdashAlpha, fcamelCase );) 将分隔符后的数值视为 prev 分隔符的一部分。这可能是第二次破折号后忽略数字开始的核心罪魁祸首。

camelCase: function( string ) {
        return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
    },

这里的 key 变成了 foo42,而用 rmultiDash(即 /[AZ]/)替换它时变成了 foo42,所以没有名称改为data-foo42它的属性data-foo-42。我认为他们需要有一些标识符(类似于散列后第一个字符的键的大写)来表示散列后的起始数字。

<div  data-foo-42="bar" data-foo-tfs="tf"></div>

返回{fooYui: "bar"}跳过第一个属性。

<div data-foo-d42="bar" data-foo-YUI="bar"></div>

返回{fooD42: "bar", fooYui: "bar"}

使用 jQuery 1.10.1

于 2013-09-20T04:40:05.037 回答