2

我有一个select带有少量自定义属性的元素,我用它来动态验证它并显示适当的消息。属性的名称是驼峰式的,如

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

问题是在 1.6 之前的 jQuery 版本中.attr()似乎区分大小写。更有问题的是,它不会获取最初的大小写属性。这在 Chrome 中的 Firefox 中的工作方式相同,但在 Internet Explorer 中按预期工作(应该不区分大小写)。任何外壳(原始外壳除外)都可以工作,这也很有趣。

这是此问题的JSFiddle 示例。您可以更改左侧的 jQuery lib 版本并点击“运行”以检查它如何与其他版本一起使用。

我将如何缓解这个问题?

4

2 回答 2

9

attr()jQuery在 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() 仅检索属性。来源

于 2011-05-18T10:11:15.757 回答
2

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

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

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

在这里查看结果

于 2011-05-18T09:59:33.433 回答