Всем доброго времени суток.
Есть
элементы с классом column в них вложены элементы с классом portlet, в portlet вложены элементы с классом column, а в этот новый column снова portlets и так как угодно много.
стоит задача превратить всю эту абракадабру в дерево данных и хранит в обьекте.
Должно получится что то вроде
........................колумн
......................./
............портлет- колумн
........../............\
колумн ..............колумн
..........\
...........портлет
сразу отвечаю на вопрос а нафига это надо.
Всё дело в том что мне надо анализировать вложенность портлетов и колумнов при каждом движении мышки над областью портлетов, поэтому я стремлюсь прокешировать информацию чтобы сократить до минимума работу с селекторами, и добиться приличной скорости, за счёт работы только с нужными ветвями дерева.
в результате всего должен получится аналог
UI sortable
Но с возможностью размещать ёмкости для портлетов(.column) внутри портлетов, к сожалению ui sortable глубокую вложенность не поддерживает.
Пытаюсь реализовать создание дерева методом рекурсии.
function trackman (obj,type){ //рекурсивная функция обходчик.
this.link=obj; //ссылка на элемент DOM для каких нибудь манипуляций с ним
this.name=$(obj).attr("id"); // ID портлета или column
this.subject=[]; // обьявляем массив в котором храним дочерние обьекты.
self=this; // делаем ссылку на контекст чтобы использовать его внутри each
if (type==1){ // если изучаем column, тоесть ищем портлеты
jQuery.each($(obj).find(">.portlet"), function(){
self.subject.push(new trackman(this,-1)); //вызываем обходчик для каждого найденного портлета
});
} else { //если изучаем portlet, тоесть ищем column
jQuery.each($(obj).find(".column:not(.column .column)"), function(){
self.subject.push(new trackman(this,1)); //вызываем обходчик для каждого найденного column
});
}
//функция строительства дерева
function arrangerRefrash(){
var i=0;
jQuery.each($(".wrpage> .column"),function(){ // перебираем все column
arrObj[i]=new trackman (this,1)
i=i+1;
});
}
но нофига невыходит, так как вместо массива с портлет я получаю portlets вложенные друг в друга.