让jQuery忽略属性/数据名称中的大小写?

时间:2011-10-03 22:48:57

标签: jquery case-sensitive camelcasing

我们正在使用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)值的情况。

3 个答案:

答案 0 :(得分:28)

对于这里给出的两种变体,您应该使用

获取值
.data('sampleattributename')

驼峰套管(.data('sampleAttributeName'))适用于属性如下:

<a  data-sample-attribute-name="something">Anchor</a>

检查this jsfiddle

答案 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