没有id或name属性的元素的innerHTML

时间:2011-11-17 05:02:35

标签: dom innerhtml

为什么以下代码不能在没有为锚元素指定的id或name属性的情况下工作?

<html>
<body>
<a href="#">First link</a>
<p>innerHTML of the first anchor: 

<script>document.write(document.anchors[0].innerHTML);</script>

</p>
</body>
</html>

但是如果我添加一个id(或name)属性,就像那样:

<a id="first" href="#">First link</a>

它开始起作用了。

为什么id或name属性如此重要?我的javascript代码中没有引用它。我不使用“getElementById”或任何东西,但它仍然希望指定一个id。

P.S。我只在IE7中测试过(不是最好的浏览器,但目前我没有更好的访问权限,而且它无法阻止我学习:)

更新:

感谢Raynos在回答中给我一个关于HTMLCollection的想法,通过搜索网络,我对这里发生的事情有了更深入的了解。

当我们使用document.anchors集合时,我们实际上指的是a元素集合,其中name属性使a元素表现为,而不是(仅)作为链接。

如果我们想将name元素称为链接,则无需指定a属性。在这种情况下,我们只需要使用不同的HTMLCollection对象实例document.links

因此,如果我们将原始代码修改为:

,原始代码将无法使用name属性
document.write(document.links[0].innerHTML);

多么善良的启蒙感! :)

2 个答案:

答案 0 :(得分:1)

WHATWG says:

  

anchors属性必须返回以Document节点为根的HTMLCollection,其过滤器仅匹配具有name属性的元素。

document.anchors集合需要具有<a>属性的name元素。

IE已知存在错误,它将id和名称视为“相同”的东西。这可能解释了为什么它适用于具有<a>属性的id元素。

另外,document.write.innerHTML是邪恶的。

答案 1 :(得分:1)

你为什么不用这个:

document.getElementsByTagName('a')[0].innerHTML