html元素id为javascript变量

时间:2012-03-16 15:40:24

标签: javascript html dom

请考虑以下代码:

<html>
<head></head>
<body>
<div id='test' class='blah'>
  <a href='http://somesite.com/' id='someLink'>click!</a>
</div>
</body>
</html>

所以我最近发现这会创建一个名为someLink的javascript对象,我可以使用someLink.href获取href属性的值。我在最新的Chrome,FF和IE中对此进行了测试,它确实有效。

首先,这个“功能”到底有多长?我想可能有一段时间了,因为我已经知道多年来页面上html元素的ID必须是唯一的,如果你有多个元素共享相同的ID,最后一个元素会覆盖前一个元素,并且使用例如getElementById()将返回最后一个。但我从来没有真正理解为什么,但现在,将其视为“这是创造一个对象”的观点,它是有道理的。所以,只要能够使用id-name-as-javascript对象直接访问它...它有多久了? IE6时代?早些时候?

第二......我想这更像是一个讨论点而不是问题,但是...... IMO这似乎不是一个非常好的“特征”,而不是... DOM和包装函数如getElementById(),给一些组织,更重要的是,减少名称空间问题?我不觉得我应该担心页面上的随机html元素会覆盖我的javascript变量(最近发生的事情,这就是我发现这个“功能”的原因)。有没有人知道为什么这就是它的原理,背后的逻辑是什么?

3 个答案:

答案 0 :(得分:10)

  

首先,这个“功能”到底有多长?

如果我没记错的话,这是一个微软主义在IE 4附近出现。

其他一些浏览器已经添加了对它的支持,以便与依赖于它的编写错误的代码兼容。有些人可能只在quirks mode中支持它。

  

这似乎不是一个非常好的“功能”

正确。不要使用它。 :)

答案 1 :(得分:3)

是的,它已经存在了很长时间,这可能是它存在的唯一原因。删除这样的“功能”将破坏与现有网站的兼容性,浏览器供应商非常不愿意这样做。

你说这不是一个好主意是正确的。这是一个非常糟糕的主意,可能导致命名冲突以及全局命名空间的不必要污染。

答案 2 :(得分:0)

这是一个旧的IE功能,不推荐使用。一些浏览器实现它,通常作为窗口对象的不可数属性。例如,FF仅在怪癖模式下执行。

如需进一步阅读,请参阅重复Is there a spec that the id of elements should be made global variable? ...