让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('sampleattributename')
驼峰套管( .data('sampleAttributeName')
)适用于属性如下:
Anchor
检查这个jsfiddle
对于您感兴趣的每个元素,迭代.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的例子