对我来说似乎是一个 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