2011-01-09 1 views
0

У меня есть панель навигации ниженабор HTML Atribute с помощью JavaScript

<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> 

Я хотел бы установить «класс» atribute на «текущий» в сНу элемента при щелчке ссылки. поэтому я могу указать новый стиль на 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-й линии? ...

+0

использует библиотеку javascipt, такую ​​как jquery, опция? – Baz1nga

+0

Не используйте цикл 'for-in' для итерации через' nodeList'. См.: Https://developer.mozilla.org/En/DOM/NodeList –

ответ

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 прогулки все свойства объекта, а не только пронумерованные.

2

ходить нодлист как массив (не как объект)

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

Если вы гуляете его как и объект, вы также получите свойство length для nodeList, что приведет к ошибке.

+0

По-прежнему существует проблема с нарушением 'setAttribute()' IE. –