Задать вопрос
@JaPoznajuMir

Как работает данный пример?

Я недавно стал изучать Javascript. Сейчас читаю учебник, в котором столкнулся вот с таким примером.

Правильно ли я понимаю алгоритм данной функции, если нет, то поправьте меня пожалуйста.

1)Если узел является элементом, то мы начинаем перебирать дочерние элементы узла.
2)Каждый элемент проверятся через рекурсивный вызов, если nodeType элемента равен ELEMENT_NODE, то рекурсивный вызов возвращает true и снова запускается.
3)Если рекурсивный вызов вернул false, то мы тогда переходим к ветке else if, если ветка возвращается false, то функция снова запускается.

Правильно ли понял алгоритм работы?

function talksAbout(node, string) {
  if (node.nodeType == document.ELEMENT_NODE) {
    for (var i = 0; i < node.childNodes.length; i++) {
      if (talksAbout(node.childNodes[i], string))
        return true;
    }
    return false;
  } else if (node.nodeType == document.TEXT_NODE) {
    return node.nodeValue.indexOf(string) > -1;
  }
}

console.log(talksAbout(document.body, "string"));
  • Вопрос задан
  • 146 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 1
Нет, и отчасти вина лежит на том, кто не ставит фигурные скобки в if/else. 1. В целом что делает функция? Проверяет, встречается ли в тексте заданная строка. Для этого мы вызываем функцию у корневого элемента, и если он не текст - вызываем в цикле функцию рекурсивно, пока не дойдем до текстового элемента. Как тплько дошли - проверяем строку на совпадение, и если совпадение нашлось - возвращаем true и завершаем работу функции. Если во всех потомках не нашлось совпадений - возвращпнм false. ( обратите внимание, false возвращается ужн после цикла), т.е. если нашли хоть одно соврадение - то все ок и возвращается true.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы
Rocket Смоленск
от 80 000 до 130 000 ₽
div. Ставрополь
от 40 000 до 90 000 ₽
Wanted. Санкт-Петербург
До 220 000 ₽
18 дек. 2024, в 12:39
1000 руб./за проект
18 дек. 2024, в 12:37
10000 руб./за проект
18 дек. 2024, в 12:22
5000 руб./за проект