Доброго вечера все. Профессионалы и любители JavaScript. Я говорил ранее, что изучаю JS по учебнику "Выразительный JS" Сейчас я нахожусь на главе DOM и иже с ним Там приведён пример как легко с помощью рекурсии сделать поиск в body определённой фразы:
function searchStr(node, string){
if(node.nodeType === document.ELEMENT_NODE) {
for (var i = 0; i < node.childNodes.length; i++)
if (searchStr(node.childNodes[i], string))
return true;
return false;
}
else if(node.nodeType === document.TEXT_NODE) return
node.nodeValue.indexOf(string) > -1
}
Вопрос вот в чём, я не понимаю зачем использовать рекурсию там, где можно использовать обычный код. Вот код, который делает тоже самое, только быстрее.
function searchStr(node, string){
for(var i=0;i<node.childNodes.length;i++)
if(node.childNodes[i].nodeType === 3)
return node.parentElement.innerText.indexOf(string) > -1;
}
На сам код пофигу, можно сделать немного изящнее, брать родителя сразу, но суть не в этом. Разве так важно пихать рекурсии везде где можно?
Делал сравнение по мс, первый код работает примерно в 5 раз медленнее второго.
Разве так важно пихать рекурсии везде где можно?
Это был риторический вопрос? Нет, не так важно.
Ваше решение не эквивалентно рекурсивному. У Вас возможны false positives, когда искомая строка получается склеиванием двух кусков текста, находящихся в разных элементах.
function searchStrTextbook(node, stringToFind) {
if (node.nodeType === document.ELEMENT_NODE) {
for (var i = 0; i < node.childNodes.length; i++)
if (searchStrTextbook(node.childNodes[i], stringToFind))
return true;
return false;
} else if(node.nodeType === document.TEXT_NODE) {
return node.nodeValue.indexOf(stringToFind) > -1;
}
}
function searchStrDenis(node, stringToFind) {
return node.parentElement.innerText.indexOf(stringToFind) > -1;
}
//console.log(document.body.innerText);
console.log(searchStrTextbook(document.body, "a" + "b"));
console.log(searchStrDenis(document.body, "a" + "b"));
span{margin:10px;}
Встречается ли в этом документе строка "a" + "b"?
<div><span>aaaa</span><span>bbbb</span></div>
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Доброго времени суток! Делаю небольшое приложение на React, опыта пока немногоУ меня два React-класса, один - это навигация, второй - форма редактирования...
Не получается нормально сделать событие mousePressed (при зажатой кнопки мыши происходит увеличение величины с шагом одна единица), получается...