Главная » Статьи » Вэб-технологии

Вывод файловой структуры данных на экран. Рекурсивно

Вывод файловой структуры данных на экран. Рекурсивно

Рекурсивной функцией строим иерарическую структуру данных, каковой является, например, файловая система операционной системы. Имеется плоский массив файлов и папок. Поле parent_id указывает на родительский элемент. Двумя первыми функциями формируем дерево. В результате чего на выводе имеем вложенный массив, с которого и выводим в браузер то, что есть. В качестве рекурсивной функции здесь выступает displayTree().

Код прилагается. В качестве раскрывающегося списка реализован тег <details> с <summary> , который працует только в браузере Chrome. Для кроссбраузерного решения лучше использовать тег <input type="checkbox"> . с соответсвующими стилями. Собственно, массив из файлов и папок нужно формировать на стороне сервера. Но это уже другая история, о которой расскажу в следующий раз. Мое решение будет основано на базе node.js - серверный яваскрипт.

 

html:
<output id="output"></output>
javascript:
/*** comment ***/

var catalog = [
 {name :"level-1", _id:"level-1", parent_id:"null",is_file: false},
 {name :"level-2", _id:"level-2", parent_id:"level-1", is_file: false},
 {name :"brother", _id:"brother", parent_id:"level-2", is_file: false},
 {name :"mama", _id:"mama", parent_id:"level-2", is_file: false},
 {name :"sister", _id:"sister", parent_id:"mama", is_file: false},
 {name :"papa", _id:"papa", parent_id:"level-2", is_file: false},
 {name :"html-1.html", _id:"html-1.html", parent_id:"level-1", is_file: true},
 {name :"html2.html", _id:"html2.html", parent_id:"papa", is_file: true},
 {name :"html4.html", _id :"html4.html", parent_id:"papa", is_file: true},
 {name :"show.html", _id :"show.html", parent_id :"mama", is_file: true}
];

var startlevel = "level-1"; //comment
var root = {name: startlevel, _id: startlevel, children:[]};
var tree = {root:root}
/* comment */
function getParent(node, root){
for(var i in node.children){
var child = node.children[i];
if(child._id === root) return child;
if(child.children.length > 0)
var childResult = getParent(child,root);
if(childResult != null) return childResult;
} 
if(node._id === root) return node;
}

function buildTree(tree){
for(var i in catalog){
var elem = catalog[i];
if(elem.name === startlevel) continue;
elem.children = [];
var root = elem.parent_id;
var parent = getParent(tree.root,root);
parent.children.push(elem);
}
}

function displayTree(node){
var str ='';
var clasName=(node.is_file ? "lightblue" : "lightgreen");
if(node.children.length > 0){ str +='<details><summary>'+node.name'</summary><ul class="pi">';}
 else { if(!node.is_file) str+= node.name;}

for(var i in node.children){
var bas =(node.children[i].is_file ? "lightgreen" : "lightblue")
str+='<li class='+bas'>';
if(node.children[i].is_file) str+= node.children[i].name;
str+= displayTree(node.children[i]);
str+='</li>';
}
if(node.children.length > 0) str+='</ul></details>';
return str;
}

buildTree(tree);
output.innerHTML = displayTree(tree.root);

 

 

 
Категория: Вэб-технологии | Добавил: Volnorez (17.09.2015) | Автор: Волнорез
Просмотров: 316 | Теги: файлового, дерева, Вывод, рекурсивно | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email *:
Код *: