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要素の「class」属性を「current」に設定したいのですが。したがって、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");

また、機能しません...しかし、関数の3行目にコメントすると、最後の行が機能しています.... 3行目にエラー構文はありますか?...

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古いバージョンのInternetExplorerではひどく壊れています。使用しないでください。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 に答える