0

我在下面有一个导航栏

<div id="cmenu" class="cmenu r">

<div id="help"><a onClick="topMenu('help','current')" href="javascript:void(0)"><span>Help</span></a></div>
<div id="refer"><a onClick="topMenu('refer','current')" href="javascript:void(0)"><span>Refer Friends</span></a></div>
<div id="home"><a onClick="topMenu('home','current')" href="javascript:void(0)"><span>Home</span></a></div>

</div>

单击链接时,我想在 div 元素中将“类”属性设置为“当前”。所以,我可以在 div/link 上指定一个新样式。这是我的函数:

function topMenu(id,prNode){
var topMenu=document.getElementById("cmenu").getElementsByTagName("div");
for (var a in topMenu){topMenu[a].removeAttribute("class");} //remove all "current" class (third line)
document.getElementById(id).setAttribute("class",prNode);} //set the new div class as "current" (last line)

但不幸的是。我的函数的最后一行不起作用......然后我尝试将最后一行更改为

alert("alert message");

它也不起作用......但是,当我评论我的函数的第三行时,最后一行正在工作......第三行是否有任何错误语法?...

4

2 回答 2

2

像数组一样遍历nodeList(不像对象)

for (var a=0;a<topmenu.length;++a){topMenu[a].removeAttribute("class");}

如果你像一个对象一样走它,你还会得到 nodeList 的属性“length”,这会导致错误。

于 2011-01-09T06:57:40.230 回答
1

setAttribute在旧版本的 Internet Explorer 中严重损坏,请勿使用它。getAttribute为映射到属性的 DOM 属性分配值(并从中读取而不是使用)。

在这种情况下,className

function topMenu(id,prNode){
    var topMenu = document.getElementById("cmenu").getElementsByTagName("div");
    for (var i = 0; i < topMenu.length; i++) {
        topMenu[i].className = '';
    }
    document.getElementById(id).className = prNode;
}

此外,不要for in用于遍历数组和类似数组的对象。for in遍历对象的所有属性,而不仅仅是编号的属性。

于 2011-01-09T10:39:33.407 回答