Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> определение завершения всех рекурсий функции 
V
    Опции темы
Frozen_Coyote
Дата 13.9.2013, 11:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 230
Регистрация: 20.9.2007

Репутация: нет
Всего: нет



Добрый день, я инфернально туплю, но по факту подскажите: как перехватить завершение всех рекурсий функций? Что мы имеем. Есть функция рекурсивно оббегающая все все дочерние узлы какой то ноды

Код

    function getChildNodes(node) 
    {
        if($(node).html() !== undefined)
        {
            alert("Хвать эту ноду!")
        }
  
        var children = node.childNodes;
        
        for(var i = 0; i < children.length; i++)          {
            getChildNodes(children[i]);
        }
        
// ... что то как то надо проверить чтобы по результату првоерки определить конец всех рекурсий и ... //

alert("Список дочерних нод создан! Спасибо за внимание, всем пока")


    }



Это сообщение отредактировал(а) Frozen_Coyote - 13.9.2013, 11:12
PM MAIL   Вверх
Frozen_Coyote
Дата 13.9.2013, 11:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 230
Регистрация: 20.9.2007

Репутация: нет
Всего: нет



Для программных гениев, вроде меня, любезно осмотревших мой скромный вопрос, и как обычно любезно промолчавших, предоставляю решение, скорее всего не идеальное, но вполне работоспособное

Код

    
    var childKolvo = 1; 

    function getChildNodes(node) 
    {
        if($(node).html() !== undefined)
        {
            alert("Хвать своего ребенка " + $(node).html() + "!")
        }
  
        var children = node.childNodes;
        
        for(var i = 0; i < children.length; i++)          
        {
            childKolvo++;
            getChildNodes(children[i]);
        }

        childKolvo--;

        if(childKolvo == 0)
        {
             alert("Всех своих детей обошли") ;  
             return;
        }
    }



PM MAIL   Вверх
ksnk
Дата 13.9.2013, 12:29 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 84
Всего: 386



Код

 function getChildNodes(node, root=true) 
    {
       ...
                      getChildNodes(children[i],false);
       ...
        if(root)
        {
             alert("Всех своих детей обошли") ;  
             return;
        }
}



--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
akizelokro
Дата 13.9.2013, 19:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Крокодил
**


Профиль
Группа: Участник
Сообщений: 761
Регистрация: 30.7.2007

Репутация: 2
Всего: 5



Где-то напилил и переделал

Код


var foundNodes = [];

function urlchecker_text(e, searchQuery) {
    var node;
        // Если элемент был передан, получение его дочерних элементов
        // иначе, предположение о том, что передан массив
    e = e.childNodes || e;
        // Просмотр всех дочерних узлов
    for ( var j = 0; j < e.length; j++ ) {
        // Если это не элемент (конечный элемент, конец поиска в цепочке), проверить его текстовое значение
        // Иначе, провести рекурсивный перебор всех дочерних составляющих
        // элемента
        if( e[j].nodeType == 3)
        {
            if(e[j].textContent.toLowerCase().indexOf(searchQuery) != -1 )
            {
                // если содержит искомую подстроку, добавить в результирующий массив
                var founded = false;
                for (var j1 = 0; j1 < foundNodes.length; j1++)
                {
                    if(foundNodes[j1] == e[j].parentNode)
                    {
                        founded = true;
                        break;
                    }
                }
                if(!founded)
                {
                    foundNodes.push(e[j].parentNode);
                }
            }
        }
        else
        {
            urlchecker_text(e[j].childNodes, searchQuery);
        }
    }
    // Возвращение соответствующего текста
    return node;
} 


Ну, как-то оно вообщем так. Правда, в рамках конкретной задачи и с комментариями я не очень "ровно" обошёлся, когда перекручивал. Один или два комментария могут врать.  smile 

Это сообщение отредактировал(а) akizelokro - 13.9.2013, 20:07


--------------------
a = a + b; b = a - b; a = a - b;
PM MAIL   Вверх
Frozen_Coyote
Дата 15.9.2013, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 230
Регистрация: 20.9.2007

Репутация: нет
Всего: нет



Неважно, спасибо все равно ))  Суть ясна ))
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1864 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.