`
wcjy5128
  • 浏览: 16733 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

JavaScript 树型目录

阅读更多
[size=medium]
这棵树属于本人原创,我正在修改中,另外图片的样式也还没有加上,大家帮帮忙,水平有限,初学js,图片应该怎么来堆放呢?
/*
 * list[id] 是保存每个节点信息的数组
 * author wcjy5128@126.com
 * 2010-4-8 
 */
var list = [];
var tree = function(objName) {
	this.title = objName;
	this.liNode = [];
	this.ulNode = [];
	this.str = document.createElement("div");
	this.str.innerHTML = this.title;
	//将各个图片的路径封装成json格式
	this.imgs = {
		folderClose:"img/folderclose.gif",
		folderOpen:"img/folderopen.gif",
		rootFolder:"img/imgfolder.gif",
		line:"img/line.gif",
		join:"img/join.gif",
		joinButtom:"img/joinbottom.gif",
		emty:"img/empty.gif",
		minus:"img/minus.gif",
		noLine_minus:"img/nolines_minus.gif",	
		noLine_plus:"img/nolines_plus.gif",
		plus:"img/plus.gif",
		plusBottom:"img/plusbottom.gif",
		line:"img/line.gif",
		joinButtom:"img/joinbottom.gif",
		page:"img/page.gif"
	};
};

//节点ID,父节点ID,节点名字,链接,目标  --->节点信息
tree.prototype.node = function(id,parentId,nodeName,url,target) {
	this.id = id;
	this.parentId = parentId;
	this.nodeName = nodeName;
	this.url = (url==null?"javascript:void(0)":url);
	this.target = (target==null?"":target);
	this.idLength = id.length;	//ID的长度
	this.hasChild = false;		//是否有子节点
	this.hasparent = false;		//是否有父节点
	this.parentNode;			//记录该节点的父节点
	this.childNode;				//记录该节点的子节点
	this.isLast = false;		//是否是最后一个节点
	this.isTop = false;			//是否是顶层节点
};

//增加节点
tree.prototype.add = function(id,parentId,nodeName,url,target) {
	var node = new this.node(id,parentId,nodeName,url,target);
	list.push(node);
	this.createTree(node); 
};

//产生一棵树
tree.prototype.createTree = function(node) {
	//判断如果它的父节点的ID是0 则表示是一个父节点  则创建一个li列表  所有的父节点是0的节点都是兄弟节点
		this.HasParent(node);
		if(!node.hasparent) {
			node.isTop = true;		//该节点是顶层节点 即根节点
			this.formatNode(node);
		} 
		if(node.hasparent) {//node是子节点,有父节点  则为该父节点的子节点创建一个div  该节点的所有子节点均在该div中
			this.findParent(node);
			this.appendChild(node.parentNode,node);		//将父节点和子节点一并传入到子节点中 获取相应的信息
		} else {
			this.formatNode(node);
		}
};

//找到父节点
tree.prototype.findParent = function(node) {
	var parent;
	for(var i=0;i<list.length;i++) {
		if(list[i].id == node.parentId) {			//表示该node是属于某个节点的子节点
			node.parentNode = list[i];				//找到父节点位置
		}
	}
};

//格式化兄弟节点
tree.prototype.formatNode = function(node) {
	var div1 = document.createElement("div");
	var img = document.createElement("img");
	img.src = this.imgs.line;
	var div2 = document.createElement("div");
	div2.className = "parent";
	div2.id = node.id;
	div2.innerHTML = "<img id='img"+node.id+"' onclick='expandChild(this.parentNode.id)' src='"+this.imgs.plus+"'/><img src='"+this.imgs.folderClose+"'/><a href='"+node.url+"' target='"+node.target+"'>"+node.nodeName+"</a>";
	div1.appendChild(div2);
	this.ulNode[node.id] = div1;
	this.liNode[node.id] = div2;
};

//添加子节点
tree.prototype.appendChild = function(parent,node) {
	var div = document.createElement("div");
	div.className = "child";
	div.id = parent.id+"_"+node.id;
	div.innerHTML = "<img id='img"+node.id+"' onclick='expandChild(this.parentNode.id)' src='"+this.imgs.plusBottom+"'/><img src='"+this.imgs.folderClose+"'/><a href='"+node.url+"' target='"+node.target+"'>"+node.nodeName+"</a>";
	this.liNode[node.id] = div;
	var obj = this.liNode[node.parentId];
	if(obj != null&&typeof(obj)!="undefined") {
		if(div.id.substr(0,parent.idLength)==node.parentId) {
			div.style.display = "none";
		}
		obj.appendChild(div);
	}	
};

//判断该节点是否有父节点
tree.prototype.HasParent = function(node) {
	var last;
	for(var i=0;i<list.length;i++) {
		if(list[i].id == node.parentId) {
			node.hasparent = true;
		}
	}	
};

//判断该节点是否有子节点
tree.prototype.HasChild = function(node) {
	var last;
	for(var i=0;i<list.length;i++) {
		if(list[i].parentId == node.id) {
			node.hasChild = true;
		}
	}	
};

//start
tree.prototype.start = function() {
	for(var node in this.ulNode) {
		this.str.appendChild(this.ulNode[node]);
	}
	var tree = document.getElementById("treeDiv");
	tree.innerHTML = this.str.innerHTML;
};

//展开节点的方法
function expandChild(divId) {
	var arr = divId.split("_");
	if(arr.length==1) {
		arr[1] = arr[0];
	}
	var all = document.getElementsByTagName("div");
	for(var i=0; i<all.length; i++) {
		if(all[i].id.split("_")[0] == arr[1]&&all[i].className != "parent") {
			var fuck = document.getElementById(all[i].id);
			if(fuck.style.display == "none") {
				fuck.style.display = "block";
				fuck.parentNode.firstChild.src = "img/minus.gif";
			} else {
				fuck.style.display = "none";
				fuck.parentNode.firstChild.src = "img/plusbottom.gif";
			}
		}
	}
}

html部分:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>树</title>
<link rel="stylesheet" href="tree.css" type="text/css"/>
<script type="text/javascript" src="tree.js"></script>
</head>
<body>
<div id="treeDiv"></div>
<script type="text/javascript">
	var tr = new tree("我的树");
	tr.add("1","0","first","http://www.baidu.com","leftFrame");
	tr.add("2","0","second","http://www.baidu.com","leftFrame");
	tr.add("3","0","third","http://www.baidu.com","leftFrame");
	tr.add("4","1","forth","http://www.baidu.com","leftFrame");
	tr.add("5","1","fifth","http://www.baidu.com","leftFrame");
	tr.add("6","1","sixth","http://www.baidu.com","leftFrame");
	tr.add("7","4","sixth","http://www.baidu.com","leftFrame");
	tr.add("8","4","sixth","http://www.baidu.com","leftFrame");
	tr.add("9","6","sixth","http://www.baidu.com","leftFrame");
	tr.add("10","5","sixth","http://www.baidu.com","leftFrame");
	tr.add("11","5","sixth","http://www.baidu.com","leftFrame");
	tr.add("12","6","sixth","http://www.baidu.com","leftFrame");
	tr.add("13","2","sixth","http://www.baidu.com","leftFrame");
	tr.add("14","2","sixth","http://www.baidu.com","leftFrame");
	tr.add("15","3","sixth","http://www.baidu.com","leftFrame");
	tr.add("16","9","sixth","http://www.baidu.com","leftFrame");
	tr.add("17","14","sixth","http://www.baidu.com","leftFrame");
	tr.start();
</script>
</body>
</html>

css部分:
.parent {
	line-height:10px;
	font-size:15px;
	font-family:"Arial Rounded MT Bold";
	border:0px solid #000;
}
.child {
	margin-left:17px;
	border:0px solid #0000ff;
	margin-top:2px;
}

body {
	font-size:14px;
}
这个我也花了两天的时间写出来的,请各位高手帮我提出解决问题的办法,谢谢了
[/size]
  • 大小: 1.2 KB
0
0
分享到:
评论

相关推荐

    JSP树型目录,javascript树型目录。

    接着,我们来看"javascript树型目录"。JavaScript主要负责在用户浏览器端动态渲染树型目录,实现目录的展开与折叠、节点选择等功能。常见的JavaScript库,如jQuery、Vue.js、React等,都有对应的插件或组件可以实现...

    JavaScript代码-树型目录菜单.zip

    js代码-树型目录菜单.zip

    Javascript树型菜单

    JavaScript树型菜单是一种在网页中展示层次结构数据的交互式元素,常用于网站导航、文件系统浏览或组织复杂数据。这种菜单通常以节点的形式呈现,每个节点可以展开或折叠,显示其子节点。在给定的文件列表中,我们...

    用JavaScript制作可折叠树型目录菜单.zip

    在JavaScript编程中,创建可折叠的树型目录菜单是一项常见的任务,尤其在网站导航或文件管理系统中非常实用。本项目通过结合HTML、CSS和JavaScript技术,实现了一个动态、交互式的树形菜单。以下是对这个压缩包文件...

    很漂亮的javascript树型文件目录结构

    很有用的javascript实现的树型文件目录结构,可伸缩折叠。 代码实例: &lt;script type="text/javascript"&gt; &lt;!-- d = new dTree('d'); d.add(0,-1,'My example tree'); d.add(1,0,'Node 1','example01.html'); d.add...

    JavaScript 树型控件源码

    JavaScript树型控件是一种在网页上展示层次结构数据的交互组件,它通常用于文件系统、组织结构图或者导航菜单等场景。在这个“JavaScript 树型控件源码”中,我们可以期待找到一个实现这种功能的代码库。接下来,...

    ajax动态树型目录

    综上所述,"Ajax动态树型目录"是结合了Ajax技术、JavaScript编程、前端模板引擎以及合理的数据结构设计,实现的一种交互性强、响应快速的网页组件。通过异步加载和动态更新,它能够为用户提供流畅的浏览体验,同时...

    asp+acess树型目录 (3个)

    在IT行业中,构建一个树型目录结构是常见的需求,特别是在网页设计和开发中。ASP(Active Server Pages)是一种由微软开发的服务器端脚本环境,它允许开发人员使用VBScript或JScript等语言创建动态网页。而Access则...

    js做的树型结构javascript作的树型结构javascript作的树型结构

    js做的树型结构,应该是很好的,javascript作的树型结构javascript作的树型结构javascript作的树型结构javascript作的树型结构javascript作的树型结构javascript作的树型结构javascript作的树型结构javascript作的树型...

    javascript树型无限级菜单

    JavaScript树型无限级菜单是一种常见的前端交互设计,用于构建层级结构的数据展示,如导航系统、组织架构或文件系统。在网页应用中,这种菜单能够帮助用户以清晰、可折叠的方式浏览复杂的层次信息。本文将深入探讨...

    Javascript 树型结构集合

    JavaScript中的树型结构集合是一种数据组织方式,常用于构建层级关系的数据模型,如目录结构、组织架构、导航菜单等。在本案例中,"Javascript 树型结构集合"可能包括了像dtree、treeview、menu和qqmenu等多种实现...

    PHP树型目录 目录

    "PHP树型目录"是指使用PHP实现的一种显示和管理文件系统目录结构的方法。通过创建一个树形视图,用户可以更直观地浏览和操作多级目录。这种功能在文件管理系统、文件上传下载平台或者网站后台管理系统中非常常见。 ...

    JavaScript树型菜单 dtree

    JavaScript树型菜单dtree是一种常见的前端交互元素,用于在网页中展示层次结构的数据,比如目录、组织架构或者分类。在Web开发中,它为用户提供了一种直观、易于导航的方式来探索和操作多级数据。以下是对这个主题的...

    非常不错的javascript树型导航

    综上所述,创建JavaScript树型导航涉及HTML结构、CSS样式和JavaScript交互等多个方面。通过熟练掌握这些技能,我们可以构建出高效、交互性强的树型导航系统,为用户提供更好的浏览体验。在实践中,不断学习和使用新...

    树型目录,权限设置通用JS实例

    总的来说,"树型目录,权限设置通用JS实例"涉及了JavaScript的数据结构、前端UI设计、用户交互以及安全控制等多个方面的知识。开发者需要具备扎实的JavaScript基础,理解数据结构与算法,以及良好的前端开发技能,...

    树型目录ASP+ACESS

    在ASP中实现树型目录通常需要利用HTML、CSS和JavaScript(前端技术)配合服务器端的ASP脚本(后端技术)来完成。 3. **ACCESS数据库**:Microsoft Access是一种关系型数据库管理系统,它易于使用且功能强大,适合...

    javascript树型组件可做弹出的树型下拉列表

    JavaScript树型组件是一种常见的前端开发工具,用于在网页中展示层次结构的数据,通常以节点的形式呈现,节点可以展开和折叠,常用于导航菜单、数据筛选和配置选择等场景。在这个特定的案例中,我们讨论的是一款能...

    JavaScript树型数据结构Baobab.zip

    Baobab 是一个 JavaScript 树型数据结构,支持游标。示例代码:var Baobab = require('baobab'); var tree = new Baobab({  palette: {  colors: ['yellow', 'purple'],  name: 'Glorious colors' ...

    javascript树型菜单(Dtree和Xtree)

    JavaScript树型菜单是一种常见的网页交互元素,用于组织和展示层级结构的数据,比如网站导航、文件目录等。在前端开发中,Dtree和Xtree是两种常见的JavaScript实现树型菜单的库。下面将详细介绍这两个库以及相关知识...

Global site tag (gtag.js) - Google Analytics