【问题标题】:jQuery .attr() seems to be case sensitivejQuery .attr() 似乎区分大小写
【发布时间】:2011-08-27 21:55:47
【问题描述】:

我有一个 select 元素,其中包含一些自定义属性,我使用这些属性即时验证它并显示适当的消息。属性的名称是驼峰式的,如

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

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

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

我将如何缓解此问题?

【问题讨论】:

标签: jquery case-sensitive attr


【解决方案1】:

jQuery 在 1.6 中改变了 attr() 的工作方式。在此版本之前,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

【讨论】:

    【解决方案2】:

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

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

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

    See the result here

    【讨论】:

    猜你喜欢
    • 2016-11-26
    • 1970-01-01
    • 1970-01-01
    • 2013-12-13
    • 2023-03-20
    • 2014-11-03
    • 2018-04-01
    • 2012-12-01
    • 2013-03-06
    相关资源
    最近更新 更多