2012-03-16 107 views
10

考虑下面的代码:HTML元素的ID作为JavaScript变量

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

所以我刚刚发现,这将创建一个JavaScript对象调用someLink,我可以例如获得href属性的值与someLink.href。我在最新的Chrome,FF和IE中测试了它,并且它工作正常。

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

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

+0

“我已经知道多年以来,页面上html元素的ID必须是唯一的,并且如果确实有多个元素共享相同的ID,则最后一个元素覆盖前一个元素,并且使用例如getElementById()将返回最后一个“据我所知,'getElementById()'将返回**第一个**,而不是最后一个具有给定ID的元素;尽管它绝对不一致(或者至少不应该依赖于一致性)。 – 2012-03-16 15:44:47

+6

你用第二点击打头部。它不是一个很好的特性,这就是为什么它永远被弃用,如果你使用''use strict''指令,它将不会工作。 – zzzzBov 2012-03-16 15:45:14

回答

9

首先,这个“功能”有多久了?

如果我没有记错的话,这是一个围绕IE 4出现的Microsoft-ISM。

其他一些浏览器已经增加了对它的支持,以便与依赖它的糟糕代码兼容。有些人可能只支持quirks mode

这似乎不是一个很好的 “功能” 有

正确的。不要使用它。 :)

3

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

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

+0

我认为''使用严格''模式中删除了“功能”。 – 2012-03-16 15:47:24

+1

@Rocket:'“use strict”'是一个ECMAScript特性,不会影响DOM行为。 – 2012-03-16 15:49:10