Rob*_*nik 2 jquery case-sensitive attr
我有一个select
包含很少自定义属性的元素,我用它来动态验证它并显示相应的消息.属性的名称是camel cased,如
<select validationMessage="Must select something" ... >...
Run Code Online (Sandbox Code Playgroud)
问题是在早于1.6的jQuery版本中.attr()
似乎区分大小写.更有问题的是,它不会获取原始的套接字属性.这在Firefox中的Firefox中也是如此,但在Internet Explorer中按预期工作(不应该不区分大小写).任何套管(原始套管除外)都有效,这也很有趣.
这是这个问题的JSFiddle示例.您可以在左侧更改jQuery lib版本并点击"运行"以检查它与其他版本的工作方式.
我如何缓解这个问题?
jQuery改变了attr()
1.6的工作方式.在此版本之前,attr()
主要是直接映射到引擎盖下的属性 - 而不是人们可能认为的属性.由于DOM属性名称通常是单个单词,因此jQuery将大多数字符串转换为小写字母,并为少数几个以驼峰为基础的属性名称设置了异常.jQuery的表现这样的原因是处理浏览器的不一致性和错误getAttribute()
和setAttribute()
.
从jQuery 1.6开始,.attr()方法为尚未设置的属性返回undefined.此外,.attr()不应用于普通对象,数组,窗口或文档.要检索和更改DOM属性,请使用.prop()方法.资源
在1.6中,attr()
映射到getAttribute()
引擎盖下,新prop()
方法检索属性值.
在特定情况下,属性和属性之间的差异可能很重要.在jQuery 1.6之前,.attr()方法有时在检索某些属性时会考虑属性值,这可能会导致行为不一致.从jQuery 1.6开始,.prop()方法提供了一种显式检索属性值的方法,而.attr()只检索属性.资源