我有一个select
元素,其中包含很少的自定义属性,用于动态验证它并显示相应的消息。属性的名称是骆驼,如
<select validationMessage="Must select something" ... >...
问题在于,jQuery版本早于1.6 .attr()
似乎区分大小写。更有问题的是,它不会获取原始的套接字属性。这在Firefox中的Firefox中也是如此,但在Internet Explorer中按预期工作(不应该不区分大小写)。任何套管(原始套管除外)都有效,这也很有趣。
以下是此问题的JSFiddle example。您可以在左侧更改jQuery lib版本,然后单击“运行”以检查它与其他版本的工作方式。
我如何缓解此问题?
答案 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")