Nam*_*ame 39 html javascript dom global-variables identifier
如果我有一个<div id='a'>Chrome浏览器,那么在javascript中我可以做(就好像是一个全局变量).a.stuff()a
然而,这不适用于FireFox - 我将需要使用document.getElementById('a').
这里的正确行为是什么?(根据W3规格)
另外我感兴趣的是,如果我有一个id为div a但a在我的脚本中也有一个全局变量,Chrome将如何解决这种歧义.这种行为是随机的还是笨拙的?
如何将一个id由连字符(" - "),冒号(":")和句点(".")组成的元素进行翻译(好吧我知道它们可以被访问document.getElementById但浏览器将如何将其转换为表示它们的全局变量)
小智 40
这取决于您阅读的规格.:)
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规范目前需要此行为,但有一个开放的错误请求将其删除.
无论规范是否合规,window对应用程序代码使用全局命名空间(即)通常被认为是不良行为.考虑使用document.getElementById()或jQuery便捷方法引用元素ID (例如$("#a")),并使用函数范围的变量来避免将新变量引入全局命名空间.
在WHATWG邮件列表上对此行为进行了较长时间的讨论.
Rob*_*obG 11
从很早开始,IE就创建了全局变量,这些变量通过名称或id属性值引用元素.这绝不是一个好主意,但被其他浏览器复制,以便与为IE创建的网站兼容.
这是一个坏主意,不应复制或使用.
回答你的额外问题:
...如果我有一个带有id a的div但是在我的脚本中有一个名为a的全局变量,Chrome将如何解决这种歧义.
在IE(引入此行为)中,如果声明的全局变量具有与元素id或名称相同的名称,则它将优先.但是,未声明的全局变量不会那样工作.在Chrome中测试它并不需要太多(我有,但我不会给你答案).
如何将一个由连字符(" - "),冒号(":")和句点(".")组成的元素进行翻译(好吧我知道可以使用document.getElementById访问它们,但浏览器将如何翻译它进入代表它们的全局变量)
与任何不是有效标识符的对象属性名称完全相同 - 方括号表示法(即window ['name-or-id']).
从技术上讲,这个问题是意见,但这是一个好问题。
JavaScript 中的变量命名规则和HTML中的ID命名规则不同。我看不出这是什么好事。
例如,在此页面上有一个 ID 为“notify-container”的元素。这根本不是有效的 JavaScript 名称。
另外,这些名字什么时候绑定?如果内联脚本声明了一个变量,然后元素出现在后面,哪个优先?
它不能保持一致。
| 归档时间: |
|
| 查看次数: |
8458 次 |
| 最近记录: |