预期
<div data-foo-42="bar"></div>
div div.data()
是一个空对象吗?
data-
属性名称有哪些要求?
在jquery bug tracker中创建了一个票证:http://bugs.jquery.com/ticket/14376
答案 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