我的IE不支持"document.getElementById()"!

7

我的IE浏览器是IE 6版本。虽然很老旧,但我必须使用它。

最近我发现一个奇怪的问题,它不支持"document.getElementById()"方法!

请查看我的测试文件:test.html

<a id="aaa">xxx</a>
<script>
aaa = document.getElementById("aaa");
alert(aaa);
</script>

当我用IE打开这个文件时,会出现一个错误对话框:

line: 3
char: 1
error: object doesn't support the attribute or method
code: 0
URL: file://D:/test.html

我犯了一些错误吗?太奇怪了~


这是你的整个测试文件,还是其中的片段? - Pops
5个回答

15

这是由于在IE6中,锚元素被设置为一个名为aaa的全局变量。然后,您试图使用另一个具有相同名称的变量。

如果您将其更改为...

<a id="aaa">xxx</a>
<script>
bbb = document.getElementById("aaa");
alert(bbb);
</script>

它应该起作用。

请参见http://verens.com/2005/03/18/getelementbyid-bug-in-ie6/


我在使用IE6和XP操作系统时,没有观察到他的代码和你的代码之间的任何行为差异。 - Pops
@meder,当然我做了。我在本地运行了两组代码,我的机器上没有任何行为差异。如果只是我的机器有问题,那就没事了。从点赞的数量来看,我猜是这样的。我并不是在指责他错了,只是陈述了这个事实;没必要指责我没看懂。 - Pops
谢谢!是的,你说得对~~ 如果你不告诉我,我永远不会知道。我必须花费几个小时或几天来调试这个问题。我喜欢stackoverflow,也爱你们所有人! - Freewind

4
正如barrylloyd所述,这是因为在IE6中,锚点元素被设置为全局变量,名称为aaa。您可以使用var创建一个名为aaa的局部变量:
<a id="aaa">xxx</a>
<script type="text/javascript">
var aaa = document.getElementById("aaa");
alert(aaa);
</script>

3
你和巴里已经找到了答案,但术语需要稍微调整一下。你在上面创建的变量是全局变量而不是局部变量。IE做的一点小技巧是,如果在全局级别甚至无法找到标识符的搜索,则会在其元素ID索引中搜索,如果找到匹配项,则返回它。这不是其他引擎所做的事情,IE做这件事真的很烦人。 - AnthonyWJones
@AnthonyWJones,非常清晰明了。谢谢! - Kramii

4

更改变量名称,使其与元素ID不同。


0
这是你的html文件的片段还是整个文件?在第一种情况下,我建议添加适当的标签(<html><body>)和文档类型声明。其次,该元素应在执行此 javascript 时被加载,但是在 IE6 中,我不会依赖它。因此,您可能希望尝试将其放在 onload 函数中:
window.onLoad = function() {
  alert(document.getElementById("aaa"));
}

这是整个文件。我按照您说的添加了标签,但问题仍然存在。此外,@barrylloyd 是正确的。不过还是谢谢大家。 - Freewind

-3

如果您将 JavaScript 代码块放在 <head> 标签部分中,它就会正常工作。这也是 JS 通常应该放置的地方。


3
这不是真的,而且在性能方面也不被推荐使用:http://developer.yahoo.net/blog/archives/2007/07/high_performanc_5.html - Peter Kruithof
1
嗯,将脚本移动到底部以加快渲染速度的观点很有趣。 - Moses Ting

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接