|
1
368
应该发生的是,将命名元素作为
IE还添加了命名元素作为
它还意味着这些元素作为全局变量可见。幸运的是,在这种情况下,任何真正的全球
省略通常被认为是不好的做法
Opera复制了IE,然后WebKit加入了,现在这两种方法都是以前不标准的将命名元素加入
什么是命名元素?任何带有
|
|
|
2
46
如前所述,这种行为称为
named access on the window object
. 的值
它最初由Internet Explorer添加,最终由所有其他浏览器实现,只是为了与依赖于此行为的站点兼容。有趣的是,Gecko(火狐的渲染引擎)选择在 quirks mode 只有,而其他渲染引擎将其保留在标准模式下。
但是,从火狐14开始,
Firefox now supports named access
上
WebKit最近
considered the opposite
,将上的命名访问
所以这个行为现在看起来很疯狂 在标准模式下,在所有主要浏览器的最新版本中使用在技术上是安全的 . 但是,尽管命名访问看起来有些方便, 不应该使用 .
为什么?这篇文章可以总结出很多关于为什么
global variables are bad
. 简单地说,拥有一堆额外的全局变量会导致更多的错误。假设您不小心输入了
此外,尽管标准化了,但是在浏览器的命名访问实现中仍然存在相当多的差异。
我相信如果你尝试在边缘案例上使用命名访问,会有更多的内容。
如其他答案所述,使用
请不要在站点中使用命名访问来传播此问题。很多Web开发人员都浪费时间来跟踪这个问题 神奇的 行为。我们真的需要采取行动,让渲染引擎在标准模式下关闭命名访问。从短期来看,它会破坏一些做坏事的网站,但从长远来看,它将有助于推动网络向前发展。 如果你感兴趣的话,我会在我的博客上详细讨论这个问题。- https://www.tjvantoll.com/2012/07/19/dom-element-references-as-global-variables/ . |
|
3
20
你应该坚持
我喜欢把元素和
|
|
|
4
3
是的,他们有。
在Chrome 55、Firefox 50、IE 11、IE Edge 14和Safari 10中测试
|
|
|
5
2
问题应该是这样的:“带有所提供ID的HTML标记是否成为全局可访问的DOM元素?” 答案是肯定的! 这就是它的工作方式,这就是为什么W3C首先引入了ID。 解析脚本环境中HTML标记的ID将成为其相应的DOM元素句柄。 然而,Netscape Mozilla拒绝遵守(对他们来说是入侵)W3C,并顽固地使用不推荐使用的name属性来造成破坏,因此破坏了W3C引入唯一ID带来的脚本功能和编码便利性。 在Netscape Navigator 4.7失败之后,他们的开发人员都去渗透W3C,而他们的同事则用错误的实践和错误的示例取代了Web。强制使用和重用已弃用的名称属性[!这并不意味着是唯一的]与ID属性一样,这样使用ID句柄访问特定的DOM元素的脚本就会被破坏!
并打破他们的做法,因为他们也会编写和发布大量的编码课程和示例[他们的浏览器无论如何都无法识别],例如
他们很容易就说服了那些无知的代码编写爱好者,他们认为名称和ID实际上是一样的,只是ID属性比古老的名称属性更短,因此节省了字节,而且对编码人员来说更方便。这当然是个谎言。或者-在他们取代发布的HTML文章中,令人信服的文章认为您需要为标签提供名称和ID,以便脚本引擎可以访问它们。 马赛克杀手[代号为“Mozilla”]非常愤怒,他们认为“如果我们倒下了,互联网也应该倒下”。 另一方面,正在崛起的微软太幼稚了,他们认为应该保留已弃用并标记为删除名称的属性,并将其视为唯一标识符的ID,这样他们就不会破坏由Netscape受训人员编码的旧页面的脚本功能。他们犯了致命的错误… 返回一个ID冲突元素数组集合也不是这个人为问题的解决方案。实际上,它打败了整个目的。
这就是W3C变丑的唯一原因,给了我们一些愚蠢的想法,比如
|
|
|
code-geek · Jquery根据单选按钮选择隐藏或显示文本字段 1 年前 |
|
|
Alex · 在轻量级中同时解构和不解构变量 1 年前 |
|
|
Ângelo Rigo · ReactJS映射:如何迭代[关闭] 1 年前 |
|
|
bairog · 从按属性筛选的对象数组字典中创建值数组 1 年前 |
|
|
lokiuucx · JS对象属性返回未定义,尽管对象属性应该有值 1 年前 |