javascript - 带数字的数据属性名称

标签 javascript jquery html

是否预计为

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

         ....

另一个将数据属性名称转换为上面使用的 key ,实际上将 key 转换为驼峰式 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

关于javascript - 带数字的数据属性名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18908703/

相关文章:

javascript - 如何访问类函数内的类变量?

javascript - 使用 ajax php mysql 使用 html 链接单击更新数据库

javascript - preventDefault 不适用于 anchor

jquery - 我可以在 JQuery 属性等于选择器 ([attribute=value]) 中添加单引号吗?

html - Unslider 样式问题点

javascript - 如何缩放网页内容?

javascript - 有没有办法将变量从 ui.router 传递给 Controller ​​?

Javascript 字符串和字符比较

html - 标题菜单没有出现在我的汉堡包 html 页面中

jquery - 元素位置