为什么以下代码不能在没有为锚元素指定的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);
多么善良的启蒙感! :)
答案 0 :(得分:1)
anchors属性必须返回以Document节点为根的HTMLCollection,其过滤器仅匹配具有name属性的元素。
document.anchors
集合需要具有<a>
属性的name
元素。
IE已知存在错误,它将id和名称视为“相同”的东西。这可能解释了为什么它适用于具有<a>
属性的id
元素。
另外,document.write
和.innerHTML
是邪恶的。
答案 1 :(得分:1)
你为什么不用这个:
document.getElementsByTagName('a')[0].innerHTML