文档章节

jquery树形ztree插件根据文件目录路径动态生成树形list的算法

冲冠一怒为红薯
 冲冠一怒为红薯
发布于 2016/11/27 18:28
字数 855
阅读 496
收藏 5

我使用python遍历目录后得到的路径都是一条条的记录,例如:

e:\\test1\\test2\\ou.h
e:\\test1
e:\\test4\\test3\\test6\\ko.cpp

而ztree的treenode节点数据共有两种形式。

一种是标准json数据格式,标准的 JSON 数据需要嵌套表示节点的父子包含关系:

var nodes = [
	{name: "父节点1", children: [
		{name: "子节点1"},
		{name: "子节点2"}
	]}
];

 一种是简单json数据格式,简单模式的 JSON 数据需要使用 id / pId 表示节点的父子包含关系:

var nodes = [
	{id:1, pId:0, name: "父节点1"},
	{id:11, pId:1, name: "子节点1"},
	{id:12, pId:1, name: "子节点2"}
];

我本次想到的方法,只针对简单json数据格式,对于标准json数据格式,我没有想到好的方法,如果读者你有好的方法的话,请一定告诉博主,博主感谢你!

我必须要把获取到的路径,转换成简单json数据格式,思考之后,我写下了如下的算法:

设置全局变量 checkid = 0
第一个节点的id从1开始

对每一条路径进行分段:
如 e:\\my1\\my2\\text1
分段为 e: , my1 , my2 , text1 四段

对每一段:
查找当前json数据中,所有pid == checkid的节点的name是否与当前段重合,
如果相同,checkid = 重合节点.id
如果不同,将该段作为新节点加入json,新节点id顺延+1,新节点的pid=checkid,checkid = 新节点.id 

一条路径处理完,checkid重置为0

 接下来,我们验证算法的正确,假设有两条路径

e:\\my1\\my2\\text
e:\\my3

转换过程如下:

对第一条路径
checkid初始为0
(1)e:没有,加入该节点,id=1,pid=0,name:"e:",checkid == 1
(2)my1 没有,加入该节点,id=2,pid=1,name:"my1",checkid == 2
(3)my2 没有,加入该节点,id=3,pid=2,name:"my2",checkid == 3
(4)text 没有,加入该节点,id=4,pid=3,name:"text",checkid == 4
checkid重置为0

对第二条路径
(1)e: 已经存在,跳过,checkid == 1
(2)my3 没有,加入my3, id=5,pid=1,name:"my3",checkid == 5

转换后的格式与预期是一样的!

实际代码:(写的烂不要骂我)

var zNodes =[];

var liststr = 路径数组
			
for (var i = liststr.length - 1; i >= 0; i--) {
    var strarr = liststr[i].route.split('\\');
    addtree(strarr);
    console.log("success");
}

function addtree(routearray)
{
    for (var i = 0; i < routearray.length; i++ ){ //对每一条路径数组
        if ( !checkPid(checkid,routearray[i]) ) { //假如相同路径下没有找到同名文件
         var newarr = {id:idmake, pId:checkid, name:routearray[i]}//插入新节点
         zNodes.push(newarr);
         checkid = idmake;
         idmake += 1;
        }//假如找到了同名文件,那么将checkid 赋值为同名文件的ID,这句代码在checkPid函数里,可能需要优化
        else{
        	checkid = indeid;
        }
    }
    checkid = 0;
}

function checkPid(id,key){
	for(i=0;i<zNodes.length;i++){
		if (zNodes[i].pId == id) 
		{
			if (zNodes[i].name == key) {
				indeid = zNodes[i].id;
				return true;
			}
		}
	}
	return false;
}

这样,ztree树形list就建立起来了。

© 著作权归作者所有

冲冠一怒为红薯

冲冠一怒为红薯

粉丝 10
博文 20
码字总数 11932
作品 0
丰台
程序员
私信 提问
【zTree】zTree开发使用说明【20140610】

使用条件: 使用zTree树形结构,需要在当前页面中载入zTree的js文件和样式文件 zTree核心js文件:jquery.ztree-2.6.js zTree样式文件: 因为zTree是基于jquery,所以还需要对应的jQuery库文件 ...

shihuafu
2014/06/10
2.5K
0
Jquery-zTree的基本用法

【简介】 zTree 是利用 JQuery 的核心代码,实现一套能完成大部分常用功能的 Tree 插件 兼容 IE、FireFox、Chrome 等浏览器 在一个页面内可同时生成多个 Tree 实例 支持 JSON 数据 支持一次性...

0o清风徐来o0
2013/03/28
3.5K
0
JQuery Tree插件——zTree v3.5 正式版发布

由于国庆之后一直忙于公司的项目,因此将 zTree 闲置了1个月左右。 这次升级继续以修正 bug 为主,这里要非常感谢各位用户的支持,这次修改的很多 bug 都是大家在使用过程中反映给我的。 zT...

zTree
2012/11/20
3.5K
18
201. ztree 的简单使用

效果 2. ztree的Demo (不交互后台) 2.1 引入ztree环境 2.2 使用 使用ajax 拿到json格式数据 然后生成树形菜单 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEnco......

Lucky_Me
2018/12/06
35
0

没有更多内容

加载失败,请刷新页面

加载更多

64.监控平台介绍 安装zabbix 忘记admin密码

19.1 Linux监控平台介绍 19.2 zabbix监控介绍 19.3/19.4/19.6 安装zabbix 19.5 忘记Admin密码如何做 19.1 Linux监控平台介绍: 常见开源监控软件 ~1.cacti、nagios、zabbix、smokeping、ope...

oschina130111
昨天
64
0
当餐饮遇上大数据,嗯真香!

之前去开了一场会,主题是「餐饮领袖新零售峰会」。认真听完了餐饮前辈和新秀们的分享,觉得获益匪浅,把脑子里的核心纪要整理了一下,今天和大家做一个简单的分享,欢迎感兴趣的小伙伴一起交...

数澜科技
昨天
26
0
DNS-over-HTTPS 的下一代是 DNS ON BLOCKCHAIN

本文作者:PETER LAI ,是 Diode 的区块链工程师。在进入软件开发领域之前,他主要是在做工商管理相关工作。Peter Lai 也是一位活跃的开源贡献者。目前,他正在与 Diode 团队一起开发基于区块...

红薯
昨天
43
0
CC攻击带来的危害我们该如何防御?

随着网络的发展带给我们很多的便利,但是同时也带给我们一些网站安全问题,网络攻击就是常见的网站安全问题。其中作为站长最常见的就是CC攻击,CC攻击是网络攻击方式的一种,是一种比较常见的...

云漫网络Ruan
昨天
27
0
实验分析性专业硕士提纲撰写要点

为什么您需要研究论文的提纲? 首先当您进行研究时,您需要聚集许多信息和想法,研究论文提纲可以较好地组织你的想法, 了解您研究资料的流畅度和程度。确保你写作时不会错过任何重要资料以此...

论文辅导员
昨天
44
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部