setAttribute() не работает

Опять же, я следую своему справочнику и ссылкам в Интернете при использовании setAttribute: это просто не работает;

HTML:

    <div id="page">
        <h1 id="header"></h1>
        <h2 id="subheader"></h2>
        <p id="pone"></p>
        <ul >
            <li id="one" class="lit" >ad nauseum</li>
            <li id="two" class="lit">ad item</li>
            <li id="three" class="lit">ad item</li>
            <li id="four" class="lit">ad item</li>
         </ul>
      </div>
      <script src="js/DOM_js.js"></script>

CSS:

  .lit { font-size: 14px;}
  .lite { font-size: 20px; font-style:italic;}   

JS:

// Change class names of li
var alli = document.getElementsByTagName("li");
alert(alli.length);

// li one 
 var lione = document.getElementById("one"); 
lione.textContent = "First point: ";
 // Ask for first point
 var fpOne = prompt("What is your first point?");
//change li one text
lione.textContent += fpOne;
alli.setAttribute("class","lite");

атрибут set не работает, даже если я помещаю строку сразу после alert(): после чего подсказка не работает. Я даже пробовал:

var alli = document.getElementsByTagName("li").setAttribute("class","lite");
alert(alli.length);

В этот момент ничего не работает.
Я даже пытался удалить исходный атрибут класса для тегов li, как было предложено в аналогичном вопросе о стеке, но все безрезультатно.

Какова правильная техника setAttribute?


person etkronberg    schedule 27.08.2015    source источник
comment
.getElementsByTagName() возвращает список элементов, а не один. Вы должны установить атрибут для каждого элемента отдельно.   -  person Pointy    schedule 27.08.2015
comment
Вы должны установить атрибут элемента, HTMLCollection нет такого метода.   -  person Teemu    schedule 27.08.2015


Ответы (2)


getElementsByTagName возвращает массив. Вам нужно перебрать массив

var alli = document.getElementsByTagName("li");
for (var i = 0; i < alli.length; i++) {
  alli[i].setAttribute("class", "lite");
}
person Richard Hamilton    schedule 27.08.2015
comment
Да, и следующий вопрос ОП: почему я не могу alli.pop()? - person Teemu; 27.08.2015

Если вы используете jquery, вам не нужно повторять:

$('li').attr('class', 'lite');
person newbie    schedule 27.08.2015