установить атрибут HTML с помощью JavaScript - PullRequest
0 голосов
/ 09 января 2011

у меня есть панель навигации ниже

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

Я бы хотел установить атрибут "class" в значение "current" в элементе 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");

это тоже не работает ... но когда я прокомментировал третью строку моей функции, последняя строка работает .... есть ли синтаксис ошибки в 3-й строке? ...

Ответы [ 2 ]

2 голосов
/ 09 января 2011

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

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

Если вы пойдете по нему как объект, вы также получите свойство "длина" нодлиста, что приведет кошибка.

1 голос
/ 09 января 2011

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

Также неt for in используется для обхода массивов и массивоподобных объектов.for in ходит все свойства объекта, а не только пронумерованные.

...