id_pripyat
@id_pripyat

Выдает ошибку при переборе .children. Что делать?

Есть задание:

/** * Функция должна перебрать все дочерние элементы элемента where * и вернуть массив, состоящий из тех дочерних элементов * следующим соседом которых является элемент с тегом P * Рекурсия - по желанию * * @param {Element} where - где искать * return {Array} * * example * для html '

' * функция должна вернуть: [div, span] * т.к. следующим соседом этих элементов является элемент с тегом P */
Вот мой код:

function findAllPSiblings(where) {
    var children = where.children
    var arr = [];
    for (var i = 0; i < children.length; i++) {
        if (children[i].nextElementSibling.nodeName = 'P') {
            arr.push(children[i])
        }
    }
    return arr;
}


Однако, при вызове функции findAllPSiblings(body) консоль (Firefox) выдает ошибку:

TypeError: children[i].nextElementSibling is null; can't access its "nodeName" property

В Google то же самое. Что делать? Почему не работает?
  • Вопрос задан
  • 174 просмотра
Решения вопроса 2
0xD34F
@0xD34F Куратор тега JavaScript
Замените i < children.length на i < children.length - 1.

А ещё разберитесь, чем присваивание отличается от проверки на равенство (nodeName = 'P', ну да, ну да).
Ответ написан
Комментировать
alexey-m-ukolov
@alexey-m-ukolov Куратор тега JavaScript
Почему не работает?
Потому что у последнего элемента по определению не может быть следующего соседа. И если у вас не бесконечная страница, у вас всегда есть последний элемент.

Что делать?
Добавить дополнительную проверку, что следующий элемент существует.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы