Цитата:
если делать дерево при помощи циклов, мне всё равно придётся прибегать к стекам и имулировать рекурсию. Так что реаляционная модель этом плане интереснее так как сводится к двум таблицам. Надо полагать что нужно составить два массива, один с колумнами с указанием родительских 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, время: 11:55. |