cały dzień dzisiejszy pisałem funkcję parsującą listę
<ul id="main_category" class="categories"> <li id="id1-Sklep">Sklep <ul id="cat1" class="categories"> <li id="id2-Hardware">Hardware <ul id="cat2" class="categories"> </ul> </li> <li id="id5-Software">Software <ul id="cat5" class="categories"> <li id="id6-OS">OS </li> <li id="id7-Gry">Gry </li> </ul> </li> </ul> </li> </ul>
i zwracającą mi obiekt z tejże listy z odpowiednimi zagłębieniami. Oto ona:
function rekurencja(id_listy){ alert('wysołanie f-cji #'+id_listy); var result = $('#'+id_listy).sortable('toArray'); var new_tab = new Object(); //alert('result.length '+result.length); for(q=0; q<result.length; q++){ new_tab[q] = new Object();alert("@"+result[q]); new_tab[q]['id'] = result[q]; new_tab[q]['child'] = new Object(); children = document.getElementById(new_tab[q]['id']).childNodes; //alert(new_tab[q]['id']+"->"+children.length); if(children.length>1){ for(w=0; w<children.length; w++){ if((children[w] instanceof HTMLUListElement)){ name = children[w].id; alert("petla "+name); new_tab[q]['child'] = rekurencja(name); } } } } return new_tab; }
W skrócie to funkcja działa tak:
1. pobiera id element listy (<ul>)
2. wyciąga elementy <li> za pomocą sortable() (zapożyczyłem z jQuery)
3. tworzymy nowy obiekt new_tab
4. w pętli do każdego elementu obiektu przypisujemy wartość id z elementy <li>
5. jeżeli dany element ma jakiś element <ul> pod sobą funkcja jest wykonywana ponownie.
To znaczy powinno to działać, bo jak zauważyłem to funkcja działa wyłącznie dla elementów w głąb. Np. mając taką listę:
Kod
Sklep
Hardware
Procesory
HDD
Software
OS
Gry
Hardware
Procesory
HDD
Software
OS
Gry
skrypt idzie Sklep->Hardware->Procesory->HDD. W ogóle nie rozumiem dlaczego tak się dzieje

Rekurencja wywołana jest chyba prawidłowo.
Proszę o rady i poprawki