2010-07-08 79 views
7

我的IE浏览器是IE 6.它很旧,但我必须使用它。我的IE不支持“document.getElementById()”!

我刚发现一个奇怪的问题,它不支持“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 

难道我犯了一些错误?这很奇怪〜

+0

是您的_entire_测试文件,还是仅从其中摘录? – Pops 2010-07-08 14:18:28

+0

@主,这是整个文件 – Freewind 2010-07-09 03:01:51

回答

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/

+0

我没有注意到他的代码和你在XP上使用IE6的行为之间的差异。 – Pops 2010-07-08 14:26:18

+0

@Torgamus - 你真的读过他的解释吗? – 2010-07-08 14:36:44

+0

@meder,当然,我做到了。我在本地运行了两套代码,并且在我的机器上没有任何行为差异。如果它只是我的机器,那很好。从upvotes我收集它是。我并没有指责他错了,只是说明了这个事实;没有必要指责我没有阅读。 – Pops 2010-07-08 14:46:17

0

这是你的html文件或整个文件的片段?在第一种情况下,我会建议添加适当的标签(<html><body>)和文档类型。其次,元素应该在你执行这个javascript时加载,但是对于IE6,我不会依赖它。因此,你可能会想尝试一个onload函数内部:

window.onLoad = function() { 
    alert(document.getElementById("aaa")); 
} 
+1

所有的好建议,但实际上并不是问题。 – Kramii 2010-07-08 14:26:30

+0

它是整个文件。我如你所说添加标签,但问题仍然存在。而@barrylloyd是正确的。但是,谢谢你们一样 – Freewind 2010-07-08 16:50:28

4

改变变量名称,以便其不一样的元素ID。

+0

谢谢你,你也是对的 – Freewind 2010-07-08 16:51:00

-3

如果您将javascript块放置在<head>标记部分内,它将起作用。无论如何,JS通常应该放置在哪里。

+3

这是不正确的,并且在性能方面不推荐:http://developer.yahoo.net/blog/archives/2007/07/high_performanc_5.html – 2010-07-08 14:26:04

+0

谢谢你都一样:) – Freewind 2010-07-08 16:51:35

+1

嗯,关于将脚本移动到底部以加速渲染的有趣点。 – 2010-07-08 22:26:52

4

正如barrylloyd指出的那样,它是因为锚元素(在IE6中)作为名称为aaa的全局变量设置的。您可以使用var创建一个名为aaa的局部变量:

<a id="aaa">xxx</a> 
<script type="text/javascript"> 
var aaa = document.getElementById("aaa"); 
alert(aaa); 
</script> 
+3

你和巴里已经得到了答案,但术语需要一点点修饰。你在上面创建的变量__is__是一个全局变量而不是局部变量。 IE所做的是一个小窍门,即如果在全局级别上搜索标识符的作用域链,则__then__会搜索其元素标识符的索引,如果它找到匹配项,则会返回它。这不是其他引擎所做的事情,它真的让IE很恼火。 – AnthonyWJones 2010-07-08 14:51:08

+0

@AnthonyW琼斯,很好的说明。谢谢! – Kramii 2010-07-09 09:00:41