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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> обход меню рекурсией 
V
    Опции темы
Evghenusi
Дата 6.5.2011, 22:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


майский жук
**


Профиль
Группа: Участник
Сообщений: 506
Регистрация: 3.8.2006
Где: Молдова, Кишинёв

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



Доброго времени суток.
Требуется обойти древовидное меню, подскажите как исправить, а то в ступор зашёл. 
Функция доходит до самых младших потомков (узлов), обрабатывает их, некоторых почему-то дважды, и помирает. Как исправить не знаю,  smile 

Код

<div id="first">
<ul id="editor">
<li>1
    <ul>
        <li>11</li>
        <li>12</li>
        <li>13
            <ul>
                <li>131</li>
                <li>132</li>
                <li>133</li>
            </ul>
        </li>
        <li>14</li>
    </ul>
</li>
<li>2
    <ul>
        <li>21</li>
        <li>22</li>
        <li>23</li>
    </ul>
</li>
<li>3</li>
<li>4</li>
</ul>
</div>


Код

function Next(n) {
    if(n.getElementsByTagName('li').length > 0) return n;
}

function rec(ul)
{
    if(ul.getElementsByTagName('ul').length > 0)
    {
        el=ul.getElementsByTagName('ul')[0].childNodes;
        if( el.length > 0 )
        {
            for(var i=0; i < el.length; i++)
            {
                if(el[i].nodeType != 3)
                {
                    alert( el[i].innerHTML );
                    if(Next(el[i])) rec( el[i] );
                }
            }
        }
    }
}

rec(document.getElementById('first'));

P.S. желательно без библиотек

Это сообщение отредактировал(а) Evghenusi - 7.5.2011, 01:33
PM WWW   Вверх
Котокобра
Дата 7.5.2011, 08:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



потому что условие всегда верно

Код

if( function(){} ) alert("ok");



надо тогда уж

Код

function Next(n) {
    if(n.getElementsByTagName('li').length > 0) return n;
    else return false;
}




почему бы не обойти меню просто по коллекции пунктов списка?

Код

function fun(id){

    var items = id.getElementsByTagName('li');

    for (i=0; i<items.length; i++)

        alert(items[i].innerHTML);

}






Это сообщение отредактировал(а) Котокобра - 7.5.2011, 08:55
PM MAIL   Вверх
Evghenusi
Дата 7.5.2011, 09:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


майский жук
**


Профиль
Группа: Участник
Сообщений: 506
Регистрация: 3.8.2006
Где: Молдова, Кишинёв

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



Цитата(Котокобра @  7.5.2011,  08:53 Найти цитируемый пост)
почему бы не обойти меню просто по коллекции пунктов списка?

по коллекции - типа по всем li которые в меню?
мне надо пройтись и собрать массив JSON-ом, записав родительские ID smile , и от простого прохода смысла нет


Цитата(Котокобра @  7.5.2011,  08:53 Найти цитируемый пост)
надо тогда уж

не помогло. 
PM WWW   Вверх
нуп
Дата 7.5.2011, 09:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ботокодер
**


Профиль
Группа: Участник
Сообщений: 987
Регистрация: 22.6.2009
Где: Кременчуг

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



Цитата(Evghenusi @  6.5.2011,  22:55 Найти цитируемый пост)
var el=ul.getElementsByTagName('ul')[0].childNodes;


PM MAIL   Вверх
Evghenusi
Дата 7.5.2011, 09:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


майский жук
**


Профиль
Группа: Участник
Сообщений: 506
Регистрация: 3.8.2006
Где: Молдова, Кишинёв

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



нуп , угу, и что там? я не вижу(

предлагаешь проверять ещё есть ли дети?

Это сообщение отредактировал(а) Evghenusi - 7.5.2011, 10:06
PM WWW   Вверх
нуп
Дата 7.5.2011, 10:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ботокодер
**


Профиль
Группа: Участник
Сообщений: 987
Регистрация: 22.6.2009
Где: Кременчуг

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



та var допишите
PM MAIL   Вверх
Evghenusi
Дата 7.5.2011, 10:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


майский жук
**


Профиль
Группа: Участник
Сообщений: 506
Регистрация: 3.8.2006
Где: Молдова, Кишинёв

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



аааааааааааааааааааааааааааааааааааааааааааааааааа  smile   smile 
ачументь  smile 
нуп огромное спасибо  smile 

я не верю, это мистика. (извините за флуд)

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


 




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


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

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