Почему консоль ругается на код?

Заметил в консоли ошибку скрипта, в чем проблема? Вот скрин ошибки: Скрин консоли

Скрин самого файла со строками:

Как видим строка 109 и 95.

Скрин кода со строками

Вот сам код:

  window.addEventListener('DOMContentLoaded', () => {
  list('.recept_shagi ol li')
});

const list = selector => {
  const listItems = document.querySelectorAll(selector) // достаем все нужные ДОМ узлы

  listItems.forEach((item, index) => { // перебераем каждый елемент и вставляем в него нужный спан с каунтером
    let span = document.createElement('span')
    span.classList.add('counter')
    span.innerHTML = `Шаг ${index + 1} <span class='counter-list'> из ${listItems.length} </span>` // тут текст каунтера
    item.append(span)
  });

  const lastItem = document.querySelectorAll('.recept_shagi ol li')[listItems.length - 1] // последний елемент списка 
  lastItem.lastChild.innerHTML = 'Готово'
}

Что не так с ним?


Ответы (1 шт):

Автор решения: MedvedevDev

Проблема в том, что listItems возвращает пустой nodeList, так как не находит на странице ни одного элемента с подобным селектором. Требуется сделать проверку, что хотя бы один элемент найден, иначе не выполнять код.

  window.addEventListener('DOMContentLoaded', () => {
  list('.recept_shagi ol li')
});

const list = selector => {
  const listItems = document.querySelectorAll(selector) // достаем все нужные ДОМ узлы

  if (listItems.length === 0) {
    return false;  
  }

  listItems.forEach((item, index) => { // перебераем каждый елемент и вставляем в него нужный спан с каунтером
    let span = document.createElement('span')
    span.classList.add('counter')
    span.innerHTML = `Шаг ${index + 1} <span class='counter-list'> из ${listItems.length} </span>` // тут текст каунтера
    item.append(span)
  });

  const lastItem = document.querySelectorAll('.recept_shagi ol li')[listItems.length - 1] // последний елемент списка 
  lastItem.lastChild.innerHTML = 'Готово'
}
<div class="recept_shagi">
  <ol>
    <li></li>
  </ol>
</div>

→ Ссылка