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

我们正在使用HTML5的data-*属性进行一些客户端交互设置。 jQuery使用它们来做它的事情。

问题是进入的HTML可能会有所不同。 显然,这是应该修复的问题,但不幸的是,我并不总是控制正在生成的HTML。

问题是:

鉴于这两个标签:

   

是否有一种聪明的方式将它们视为同一个?

我想出的最好的是这样的:

 var theAttribute = ($myobject).data('sampleAttributeName'); if (($myobject).data('sampleAttributeName')){ theAttribute = ($myobject).data('sampleAttributeName') } else { theAttribute = ($myobject).data('sampleattributename') } 

我可以把它变成一个函数,我可以将camelCase版本传递给并检查两者。 我只是想知道jQuery中是否有一个更清晰的内置function来忽略data (或attr )值的情况。

对于您感兴趣的每个元素,迭代.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); } } }); 

我有很多遗留代码,在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的例子

Interesting Posts