Is there a spec that the id of elements should be made global variable?
如果我在Chrome中有一个
但是,这不适用于FireFox-我将需要使用
这里的正确行为是什么? (根据W3规范)
另外,如果我的ID为
以及ID由连字符("-"),冒号(":")和句点("。")组成的元素的翻译方式(好,我知道可以使用
这取决于您阅读的规格。 :)
HTML4规范(请参见http://www.w3.org/TR/1999/REC-html401-19991224/struct/global.html#adef-id和http://www.w3。 org / TR / 1999 / REC-html401-19991224 / types.html#type-name)。但是,它是Internet Explorer引入的,然后为了兼容而复制到其他主要的浏览器中。 FireFox也显示此行为,但仅在怪癖模式下显示(即使如此,其实现也似乎有问题)。
WHATWG HTML规范当前需要此行为(要求将其删除的错误报告已关闭WONTFIX)。
无论是否符合规范,通常将全局名称空间(即
WHATWG邮件列表中对此行为进行了更长时间的讨论。
从早期开始,IE就创建了全局变量,这些全局变量通过元素的名称或id属性值来引用它们。这从来都不是一个好主意,但是为了与为IE创建的网站兼容,其他浏览器已将其复制。
这是一个坏主意,不应复制或使用。
编辑
要回答您的其他问题:
...how will Chrome resolve the
ambiguity if i have a div with id a
yet have a global variable called a
too in my script.
在IE(引入了这种行为)中,如果声明的全局变量的名称与元素ID或名称相同,则它将具有优先权。但是,未声明的全局变量不能那样工作。在Chrome中测试不需要花太多时间(我有,但我不会给你答案)。
And how would an element with id
consisting of hyphens ("-"), colons
(":"), and periods (".") be translated
(ok i know they can be accessed with
document.getElementById but how will
the browser translate it into the
global variable that was representing
them)
与不是有效标识符的任何对象属性名称完全相同-方括号表示法(即window ['name-or-id'])。
从技术上讲,这个问题是观点,但这是一个好问题。
IE也可以做到这一点,这给某些人带来了麻烦。
JavaScript中变量的命名规则和HTML中ID的命名规则不同。我看不到这是一件好事。
例如,此页面上有一个ID为" notify-container"的元素。那根本不是一个有效的JavaScript名称。
另外,这些名称何时绑定?如果内联脚本声明了一个变量,然后该元素稍后出现,哪个优先?
不能使其一致。
以这种方式使用元素的最糟糕的事情是,如果引入的新API在全局范围内具有相同的名称,则它们可能随时中断。
例如,如果您在添加Performance API之前就已经这样做了
1 2 3 4 | <p id="performance"> </p> performance.innerHTML ="You're doing great" |
然后,该代码段现在将在已添加Performance Performance API的最新浏览器中停止工作,这是添加了全局
我认为到目前为止,大多数浏览器都支持document.getElementById。使用此浏览器更好,更安全。