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

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

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

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

Войти через центр авторизации
Похожие вопросы
18 апр. 2024, в 21:56
2000 руб./за проект
18 апр. 2024, в 21:00
150 руб./за проект