js更改css class属性

有个下拉菜单样式,弹出来的菜单在IE下距离太大了,其它都正常,我想在IE下特殊把这个class='nav-down' 的top属性由120px改为100px怎么做
在顶上加了document.getElementByTag('nav-down').currentStyle.top='100px';
提示对象不支持此属性和方法

更改一个标签的 class 属性的代码是:

  document.getElementById( id ).className = 字符串;
  document.getElementById( id ) 用于获取标签对应的 DOM 对象,你也可以用其它方法获取。className 是 DOM 对象的一个属性,它对应于标签的 class 属性。字符串 是 class 属性的新值,它应该是一个已定义的CSS选择符。

  class 属性是在标签上引用样式表的方法之一,它的值是一个样式表的选择符,如果改变了 class 属性的值,标签所引用的样式表也就更换了,所以这属于第一种修改方法。
  利用这种办法可以把标签的CSS样式表替换成另外一个,也可以让一个没有应用CSS样式的标签应用指定的样式。

举例:

代码如下:

<style type="text/css">
.txt {
font-size: 30px; font-weight: bold; color: red;
}
</style>
<div id="tt">欢迎光临!</div>
<p><button on click="setClass()">更改样式</button></p>
<script type="text/javas cript">
function setClass()
{
document.getElementById( "tt" ).className = "txt";
}
</script>
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-11-16
提示对象不支持此属性和方法,首先你的document.getElementsByTagName(“element”),这个方法拼写错误,当然会报错了!
还有就是这个方法返回的是一个节点集合。你需要确定把这个样式用在哪个元素上面!
document.getElementById('ID').style.top='100px';
嗯,这样说不清楚了,给代码帮你解决……追问

我忘了说了,要是ID就好办了,因为下面还有几个这样的class调用,我要一起改,不能用ID,我记得有getElementByTag的,怎么不能用了,最终我想改了这个class的top属性,而不是具体哪一个ID

追答

你这样吧!
//首先得到菜单栏的节点集合(把element换成你下拉的元素)
var menu = document.getElementsByTagName(“element”)
//然后遍历循环所以的节点,当鼠标点击的时候触发事件
for(var i=0 ; i<menu.length;i++){
meun[i].onclick=function(){change(this);}
}
function change(obj){
obj.style.top="100px"
}

第2个回答  2011-11-16
给这个元素加个id,例如,设置id=outNav,然后用document.getElementById("outNav")来获取对象,再进行下一步的操作

另,currentStyle应该是IE专用的吧,它的兼容性不好追问

你说的没错,我就是针对IE距离显示问题做特殊调整的,因为有多处用到此class,单独修改一处ID没有实际效果意义,最优的做法是修改这个class,我是ie检测的,若是ie的话,既修改此class

追答

getElementsByTagName是用来获取所有同tag的元素并存入数组,不能获取相同class元素,

有一个getElementsByClassName,但是不支持IE浏览器

你可以这样子,先使用getElementsByTagName("*")取出文档中所有元素,然后进行遍历,查找className=="nav-down"的,然后再进行下一步操作

第3个回答  2011-11-16
document.getElementByTag('nav-down')你这个获得的是数组吧。。
document.getElementByTag('nav-down')[0].style.top="100px";试试这个追问

为啥说不支持此属性或方法

追答

搞了半天是getElementsByTagName()
你调试一下,看看这个document.getElementsByTagName('nav-down')[0]对象有没有获取到。。。

追问

[0]是不对的,那样得到的是个对象,方法看来也行,谢谢你

追答

那你就循环这个数组吧,再判断className。。。

第4个回答  2011-11-16
既然有class标签了为什么不再css里面改呢追问

css里无法进行浏览器检查,我在对IE的时候存在异常,所以只能在js中检查并修改,但修改好像没想像中的容易

追答

不出意外 就是ie6 IE7 出问题是吧 用hack就能轻松解决

本回答被提问者采纳
相似回答