带数字的数据属性名称

Data attribute name with digits

本文关键字:数据属性 数字      更新时间:2023-09-26

是否期望

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

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

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

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

在jquery错误跟踪器中创建了一个票证:http://bugs.jquery.com/ticket/14376

对我来说

似乎是一个jquery问题。当属性的连字符分隔符后面有一个数值时,替换键的正则表达式会导致问题(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 );
         ....

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

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