如果我有一个<div id='a'>
在 Chrome 中然后在 javascript 中我可以做a.stuff()
(就好像a
是一个全局变量)。
然而,这不适用于 FireFox - 我需要使用document.getElementById('a')
.
是什么正确的行为这里? (根据W3规格)
另外我感兴趣的是如果我有一个带有 id 的 div,Chrome 将如何解决歧义a
还有一个名为的全局变量a
我的剧本里也有。行为会是随机且古怪的吗?
id 由连字符(“-”)、冒号(“:”)和句点(“.”)组成的元素将如何被翻译(好吧,我知道它们可以通过document.getElementById
但浏览器如何将其转换为代表它们的全局变量)
这取决于您阅读的规范。 :)
HTML4 规范没有描述此行为(参见,http://www.w3.org/TR/1999/REC-html401-19991224/struct/global.html#adef-id and http://www.w3.org/TR/1999/REC-html401-19991224/types.html#type-name)。然而,它是由 Internet Explorer 引入的,然后为了兼容而复制到其他主要浏览器中。 FireFox 也显示此行为,但仅在怪癖模式(即使如此,它的实现似乎也有问题)。
当前 WHATWG HTML 规范requires这种行为(abug请求将其删除的报告已关闭(WONTFIX)。
无论是否符合规范,都使用全局命名空间(即window
)对于应用程序代码通常被认为是不良行为。考虑使用引用元素 IDdocument.getElementById()
或 jQuery 便捷方法(例如,$("#a")
)并使用函数范围的变量来避免将新变量引入全局命名空间。
关于此行为有更长的讨论WHATWG 邮件列表.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)