jQuery .attr()似乎区分大小写

时间:2011-05-18 09:42:36

标签: jquery case-sensitive attr

我有一个select元素,其中包含很少的自定义属性,用于动态验证它并显示相应的消息。属性的名称是骆驼,如

<select validationMessage="Must select something" ... >...

问题在于,jQuery版本早于1.6 .attr()似乎区分大小写。更有问题的是,它不会获取原始的套接字属性。这在Firefox中的Firefox中也是如此,但在Internet Explorer中按预期工作(不应该不区分大小写)。任何套管(原始套管除外)都有效,这也很有趣。

以下是此问题的JSFiddle example。您可以在左侧更改jQuery lib版本,然后单击“运行”以检查它与其他版本的工作方式。

我如何缓解此问题?

2 个答案:

答案 0 :(得分:8)

jQuery改变了attr()在1.6中的工作方式。在此版本之前,attr()主要直接映射到属性under the hood - 而不是人们可能认为的属性。由于DOM属性名称通常是单个单词,因此jQuery将大多数字符串转换为小写字母,并为少数几个以驼峰为基础的属性名称设置了异常。 jQuery以这种方式表现的原因是处理getAttribute()setAttribute()中的浏览器不一致和错误。

  

从jQuery 1.6开始,.attr()方法为尚未设置的属性返回undefined。此外,.attr()不应用于普通对象,数组,窗口或文档。要检索和更改DOM属性,请使用.prop()方法。 source

在1.6中,attr()映射到getAttribute() under the hood,新的prop()方法会检索属性值。

  

在特定情况下,属性和属性之间的差异非常重要。在jQuery 1.6之前,.attr()方法在检索某些属性时有时会考虑属性值,这可能会导致行为不一致。从jQuery 1.6开始,.prop()方法提供了一种显式检索属性值的方法,而.attr()只检索属性。 source

答案 1 :(得分:2)

如果您使用javascript等效attr()替换getAttribute(),则它似乎不区分大小写。

唯一的缺点是你必须首先get() js对象:

sel.get(0).getAttribute("validationMessage")

See the result here