【问题标题】:Why does jQuery always return 'open' for $.attr('open'), regardless of the actual value of the attribute?为什么 jQuery 总是为 $.attr('open') 返回 'open',而不管属性的实际值如何?
【发布时间】:2012-03-01 22:40:06
【问题描述】:

在 jQuery 中,为什么会这样:

$('<div open="whatever">').attr('open')

总是计算为'open' 而不是'whatever'?相比之下,这个:

$('<div asdf="whatever">').attr('asdf')

按预期计算为'whatever'

是的,我知道openasdf 不是有效的HTML 属性;我不是在寻找类似“只使用data-open”之类的答案……我在寻找对上述行为的解释。

【问题讨论】:

  • 你为什么首先尝试这样做?这可能是未记录的行为。
  • @helixed 你从来没有好奇过吗? ;-) Ben 可能一直在使用任意属性(现代浏览器会支持这一点),当他的应用程序无法运行时,他最终注意到这是 open 属性并想知道“嗯?为什么?”
  • @helixed,我注意到在处理一些遗留代码库的 html 时使用了裸 open= 属性。所以答案是“我一开始不会尝试这样做,我会使用 data- 属性”。
  • @Ben Lee 我并不是要批评你的提问。我只是想知道在什么情况下你会想知道这个。

标签: jquery attributes jquery-attributes


【解决方案1】:

open 实际上是一个 valid attribute for HTML5,它应该是一个布尔值。如果是这种情况,我怀疑如果您完全设置了“打开”,浏览器会将其评估为真并返回它是“打开”。

我更想知道为什么它返回“open”而不是“true”。可能是由于各种浏览器中的实现不完整。他们可能以某种方式将该属性放在一边以备后用。

[附录:根据 cmets,这似乎是 HTML 处理布尔值的方式]

【讨论】:

  • HTML 不就是这样处理布尔值的吗? checked="checked"等?
  • 可能!我其实没有这么想过。在这种情况下,它会按照应有的方式行事。
  • 谢谢,我不知道“open”是一个有效的属性!不过,我在 html5 规范中找不到它,你有没有一个链接? (如果没有,那很好)
  • 好吧,我不好意思这么说,因为我知道它在这里得到的蔑视,但我在这里偶然发现:w3schools.com/html5/att_details_open.asp——如果我理解正确,它应该只是对“详细信息”标签有效。但是不完整或不正确的实现就是它们...... ;-)
【解决方案2】:

做了一些测试,出于某种原因,这似乎有效:

document.getElementById('myID').getAttribute('open');

虽然 jQuery 不适用于 .prop() 或 .attr()

真的很奇怪?

FIDDLE

【讨论】:

    猜你喜欢
    • 2011-08-30
    • 1970-01-01
    • 2019-01-11
    • 1970-01-01
    • 1970-01-01
    • 2021-08-06
    • 2020-06-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多