带数字的数据属性名称

时间:2013-09-20 04:14:53

标签: javascript jquery html

预期

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

div div.data()是一个空对象吗?

演示:http://jsfiddle.net/nWCKt/

data-属性名称有哪些要求?

在jquery bug tracker中创建了一个票证:http://bugs.jquery.com/ticket/14376

1 个答案:

答案 0 :(得分:3)

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

来自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 );
    },

此处键变为foo42,并且用rmultiDash(即/ [A-Z] /)替换它变为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