是否预计为
<div data-foo-42="bar"></div>
div div.data()
会是一个空对象吗?
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/