Цитата:
если делать дерево при помощи циклов, мне всё равно придётся прибегать к стекам и имулировать рекурсию. Так что реаляционная модель этом плане интереснее так как сводится к двум таблицам. Надо полагать что нужно составить два массива, один с колумнами с указанием родительских portlet. другой с портлетами с указанием родительских column. Как вы предлагаете реализовать решение ? вот код на данный момент, но его результат бесконечная рекурсия. function trackman (obj,type){ this.link=obj; //ссылка на обьект для дальнейших мманипуляций this.name=$(obj).attr("id"); //id анализируемого обьекта this.subject=[]; //вложенные субьекты if (type==1){ // если изучаем column, тоесть ищем портлеты var finder=$(obj).find(">.portlet"); //ссылка на выборку портлетов var length=finder.length; //Количество вложенных портлетов for (i=0;i<length;i++){ // перебор портлетов var thisobj= finder[i]; this.subject.push(new trackman(thisobj,-1)); //вызываем рекурсию } console.log(this); } else { //если изучаем portlet, тоесть ищем column var finder2=$(obj).find(".column:not(.column .column)"); var length2=finder2.length; for(var i2=0;i2<length2;i2++){ thisobj2= finder2[i]; this.subject.push(new trackman(thisobj2,1)); }; } } function arrangerRefrash(){ var i=0; jQuery.each($(".wrpage> .column"),function(){ // перебираем все column //arrObj.push( new trackman (this,1)); arrObj[i]=new trackman (this,1) i=i+1; }); |
Я бы вообще использовал один релиационный набор, так как это проще, тем более дерево здесь по сути одно.
|
В общем то я так и поступил :)
Алгоритм в разы проще, и что удивительно скорости хватает во всех браузерах, даже если не кешировать заранее. Тем не менее от кеширования я конечно не отказался. Ограничился одним реляционным набором, но не потому что так проще, а потому что порядок следования обьектов в этом наборе соответствует вложенности. ТОБИШ вибираю таким макаром jQuery.each($(".column, .portlet"),function(){ // перебираем все column arrObj.push (new trackman (this)); }); |
Часовой пояс GMT +3, время: 09:15. |