我们正在使用HTML5的data-*
属性进行部分客户端交互设置。 jQuery使用它们来做它的事情。
问题是进入的HTML可能会有所不同。显然,这是应该修复的问题,但不幸的是,我并不总是控制正在生成的HTML。
问题:
鉴于这两个标签:
<a data-sampleAttributeName="example">
<a data-sampleattributename="example">
有没有一种聪明的方法可以将它们视为同一个?
我提出的最好的是这样的:
var theAttribute = ($myobject).data('sampleAttributeName');
if (($myobject).data('sampleAttributeName')){
theAttribute = ($myobject).data('sampleAttributeName')
} else {
theAttribute = ($myobject).data('sampleattributename')
}
我可以把它变成一个函数,我可以将camelCase版本传递给并检查两者。我只是想知道jQuery中是否有一个更清晰的内置功能来忽略data
(或attr
)值的情况。
答案 0 :(得分:28)
对于这里给出的两种变体,您应该使用
获取值.data('sampleattributename')
驼峰套管(.data('sampleAttributeName')
)适用于属性如下:
<a data-sample-attribute-name="something">Anchor</a>
答案 1 :(得分:2)
对于您感兴趣的每个元素,迭代.data()返回的对象,并通过toLowerCase()更新该元素的jQuery数据。
$('a').each(function ()
{
var $this = $(this),
data = $this.data(),
kTemp;
for (var k in data)
{
kTemp = k.toLowerCase();
if (k !== kTemp)
{
$this.data(kTemp, data[k]).removeData(k);
}
}
});
答案 2 :(得分:0)
我有很多遗留代码,在html中有数据属性。有些属性包含破折号,有些属性有混合大小写。为了支持html5数据属性的w3c规范,以及jQuery 1.6中对$ .data的更改,我创建了一个函数来将数据属性名称字符串转换为它们的w3c等价物;这意味着'data-fooBar'等属性将转换为'foobar','data-foo-barBaz'将转换为'fooBarbaz'。我需要这样的东西添加到我的$ .data()调用者,所以我不必更新现有的html,这可能涉及数据库更新,找到所有的数据属性并将它们更新为是一个噩梦符合w3c规范。此函数专门设计用于jquery库,并检查jquery版本,仅替换jQuery版本1.6+的破折号(+ camelcase)(无论jQuery版本如何,所有数据属性都将转换为小写)。无需jQuery即可轻松转换该函数。
用法:
var html5data = $(this).data(w3cdatakey('foo-barBaz')); //same as $.data('fooBarbaz');
看看这个小提琴: jsfiddle example