资源管理器中的getElementById的JS问题

时间:2009-08-24 14:56:27

标签: javascript internet-explorer getelementbyid

下面显示的html代码(使用javascript)适用于除IE之外的所有浏览器。

我最近了解到IE不想处理getElementById和id代码。

有人如此友善地告诉我,是否有另一种方法可以使其工作或是否有解决方法代码?

提前致谢,Erik

<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=8" />
<title>test</title>
<script type="text/javascript">
<!--
var color = new Object();

color["100"] = new Array("300", "400");

color["200"] = new Array("100", "300", "400");

color["300"] = new Array("100", "200");

color["400"] = new Array("200");

var colors = new Array("related");

function on(id)
{
for (var i=0; i<color[id].length; i++)
{
var el = document.getElementById("index_"+color[id][i]);
if (el)
{
el.setAttribute("class", colors[i%1]);
}
}
}

function off(id)
{
for (var i=0; i<color[id].length; i++)
{
var el = document.getElementById("index_"+color[id][i]);
if (el)
{
el.removeAttribute("class");
}
}
}
//-->
</script>

<style type="text/css">
<!--
body {
font-family: Arial, Helvetica, sans-serif;
font-size: 14px;
line-height: 18px;
color: #000000;
text-decoration: none;
}
a:link,
a:visited {
color: #000000;
text-decoration: none;
}

a:hover,
a:active {
color: #FF0000;
text-decoration: underline;
}
a.related {
color: #FF0000;
text-decoration: none;
}
-->
</style>
</head>

<body>

<a href="#" id="index_100" name="index_100" onMouseOver="on(100)" onMouseOut="off(100)">aaa</a><br />
<br />
<a href="#" id="index_200" name="index_200" onMouseOver="on(200)" onMouseOut="off(200)">bbb</a><br />
<br />
<a href="#" id="index_300" name="index_300" onMouseOver="on(300)" onMouseOut="off(300)">ccc</a><br />
<br />
<a href="#" id="index_400" name="index_400" onMouseOver="on(400)" onMouseOut="off(400)">ddd</a>

</body>
</html> 

3 个答案:

答案 0 :(得分:2)

  

el.removeAttribute( “类”);

那不行。避免在IE中使用getAttribute / setAttribute / removeAttribute,它们不受适当支持。版本8之前的IE将属性访问与JS对象属性访问混淆,导致在属性命名不同时出现混淆错误(class vs className)或属性类型不同(boolean或integer属性,其中属性始终为string)。 / p>

更好(更具可读性和跨浏览器兼容性)是使用DOM HTML属性:

el.className= '';
  

&lt; a href =“#”id =“index_100”name =“index_100”

a-elements上不需要'id''name';只需设置'id'就可以了。

答案 1 :(得分:1)

您正在尝试使用setAttribute()来设置“类”。虽然这在技术上完全有效,IE has a bug with setAttribute()并且不会设置它。

将此用于IE

el.setAttribute("className", colors[i%1]);

答案 2 :(得分:0)

<a>元素甚至需要名称属性吗?

如果没有,那么没有它们你可能会更好,减少'噪音'因素。

然而,问题可能是标记的查找程序细节是由某种框架(Struts,ASP.NET)生成的 - 并且您无法控制是否获得名称属性或不