Показать сообщение отдельно
  #1 (permalink)  
Старый 07.05.2011, 10:15
Аспирант
Отправить личное сообщение для evgh Посмотреть профиль Найти все сообщения от evgh
 
Регистрация: 29.01.2011
Сообщений: 58

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

<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. желательно без библиотек
Ответить с цитированием