Почему получаю ошибку?

Пример добавляет класс.
let cur = document.getElementsByClassName('aaa');
for(let i in cur){
  let node = cur[i];
  while(node.tagName != 'NAV'){
    if(node.classList.contains('bbb')) { node.classList.add('test'); }
    node = node.parentNode;
  }
}

html
<nav>
  <ul>
    <li>1</li>
    <li>2</li>
    <li class='bbb'>3
      <ul>
        <li>3.1</li>
        <li class='aaa'>3.2</li>
      </ul>
    </li>
  </ul>
</nav>


Вопрос: почему в консоли получаю ошибку:
"TypeError: Cannot read property 'contains' of undefined"
если за комментировать строку:
if(node.classList.contains('bbb')) { node.classList.add('test'); }

получаю ошибку:
"TypeError: Cannot read property 'tagName' of undefined"
как решить?
  • Вопрос задан
  • 56 просмотров
Решения вопроса 1
sfi0zy
@sfi0zy Куратор тега JavaScript
Creative frontend developer
Потому, что for...in перебирает не совсем то, что вы ожидаете. В вашем случае будет удобнее использовать какой-нибудь другой вариант цикла - тот же for...of к примеру.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
KickeRocK
@KickeRocK
FrontFinish
let cur = document.getElementsByClassName('aaa');
Вы получаете html коллекцию, к которой "нельзя" применять методы, как для массивов
Юзайте querySelectorAll и живите счастливо или играйтесь с .call
let cur = document.querySelectorAll('.aaa');
Пример с forEach
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы