`
xshq
  • 浏览: 44111 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

javascript 树

阅读更多
function Node(id, pid, name) {

	this.index;
	
	this.id = id;
	
	this.pid = pid;
	
	this.name = name;

	this.isLeaf = true;
	
	this.lastSibling = false;
	
	this.isClose = true;
}

function Tree() {

//	this.icon = { empty:" ", folder:"■", join:"┠", joinbottom:"┖",
//			line:"┃", page:"◇"
//	}
	
	this.icon = { 
		empty:"<img src='img/empty.gif' />", 
		folder:"img/folder.gif",
		folderopen:"img/folderopen.gif",
		plus:"img/plus.gif",
		plusbottom:"img/plusbottom.gif",
		minus:"img/minus.gif",
		minusbottom:"img/minusbottom.gif",
		join:"<img src='img/join.gif' />", 
		joinbottom:"<img src='img/joinbottom.gif' />",
		line:"<img src='img/line.gif' />", 
		page:"<img src='img/page.gif' />"
	};
	
	this.root = null;
	
	this.nodes = [];
	
	this.indents = [];
	
	this.str = "";
}

Tree.prototype.addNode = function(id, pid, name) {
	var len = this.nodes.length;
	this.nodes[len] = new Node(id, pid, name);
	this.nodes[len].index = len;
}

Tree.prototype.toString = function() {
	this.str = "<div class=\"dtree\">";
	this.initRoot();
	this.travel(this.root);
	this.str += "</div>";
	window.clipboardData.setData("text", this.str);
	return this.str;
}

Tree.prototype.initRoot = function() {
	var i = 0;
	var pNode = this.nodes[i];
	for(i=1; i<this.nodes.length; i++)
		if(this.nodes[i].id==pNode.pid) {
			pNode = this.nodes[i]; 
			i = 1;
			continue;
		}
	if(i==this.nodes.length)
		this.root = pNode;
}

Tree.prototype.travel = function(pNode) {
	this.setLS(pNode);
	this.visit(pNode);
	if(!pNode.isLeaf) {
		if(pNode.isClose)
			this.str += "<div id=\"clip" + pNode.index + "\" class=\"clip\" style=\"display:none\" >";
		else
			this.str += "<div id=\"clip" + pNode.index + "\" class=\"clip\" style=\"display:block\" >";
		this.indents.push(pNode.lastSibling);
		for(var i=0; i<this.nodes.length; i++) {
			if(this.nodes[i].pid==pNode.id)
				this.travel(this.nodes[i]);
		}
		this.indents.pop();
		this.str += "</div>";
	}
}

Tree.prototype.visit = function(node) {
	if(this.root!=node && node.isClose)
		this.str += "<div id=\"doc" + node.index + "\" class=\"dTreeNode\" style=\"display:none\" >";
	else
		this.str += "<div id=\"doc" + node.index + "\" class=\"dTreeNode\" style=\"display:block\" >";
	for(var i=0; i<this.indents.length; i++)
		this.str += this.indents[i]?this.icon.empty:this.icon.line;
	if(node.isLeaf) {
		this.str += node.lastSibling?this.icon.joinbottom:this.icon.join;
		this.str += this.icon.page;
	} else {
		this.str += "<a href=\"javascript: d.o(" + node.index + ");\">"
		this.str += "<img id=\"join" + node.index + "\" src=\"";
		this.str += node.lastSibling?(node.isClose?this.icon.plusbottom:this.icon.minusbottom):(node.isClose?this.icon.plus:this.icon.minus);
		this.str += "\" />"
		this.str += "</a>"
		this.str += "<img id=\"folder" + node.index + "\" src=\"" + this.icon.folder + "\" />";
	}
	this.str += node.name;
	this.str += "</div>";
}

Tree.prototype.o = function(index) {
	var pNode = this.nodes[index];
	document.getElementById("clip"+index).style.display = pNode.isClose?"block":"none";
	document.getElementById("join"+index).src = pNode.isClose?this.icon.minusbottom:this.icon.plusbottom;
	document.getElementById("folder"+index).src = pNode.isClose?this.icon.folderopen:this.icon.folder;
	
	for(var i=0; i<this.nodes.length; i++) {
		if(this.nodes[i].pid==pNode.id) {
			document.getElementById("doc"+this.nodes[i].index).style.display = pNode.isClose?"block":"none";
		}
	}
	pNode.isClose = !pNode.isClose;
}

Tree.prototype.setLS = function(node) {
	var lastNode;
	for(var i=0; i<this.nodes.length; i++) {
		if(this.nodes[i].pid == node.id)
			node.isLeaf = false;
		if(this.nodes[i].pid == node.pid)
			lastNode = this.nodes[i];
	}
	if(lastNode == node)
		node.lastSibling = true;
}

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html>

<head>
	<title>Destroydrop &raquo; Javascripts &raquo; Tree</title>

	<link rel="StyleSheet" href="dtree.css" type="text/css" />
	<script type="text/javascript" src="xtree.js"></script>

</head>

<body>

<h1><a href="/">Destroydrop</a> &raquo; <a href="/javascripts/">Javascripts</a> &raquo; <a href="/javascripts/tree/">Tree</a></h1>

<h2>Example</h2>

<div class="dtree">

	<p><a href="javascript: d.openAll();">open all</a> | <a href="javascript: d.closeAll();">close all</a></p>

	<script type="text/javascript">
		<!--

		d = new Tree();

		d.addNode(0,-1,'My example tree');
		d.addNode(1,0,'Node 1');
		d.addNode(2,0,'Node 2');
		d.addNode(3,1,'Node 1.1');
		d.addNode(4,0,'Node 3');
		d.addNode(5,3,'Node 1.1.1');
		d.addNode(6,5,'Node 1.1.1.1');
		d.addNode(7,0,'Node 4');
		d.addNode(8,1,'Node 1.2');
		d.addNode(9,0,'My Pictures');
		d.addNode(10,9,'The trip to Iceland');
		d.addNode(11,9,'Mom\'s birthday');
		d.addNode(12,0,'Recycle Bin');

		document.write(d);

		//-->
	</script>

</div>

<p><a href="mailto&#58;drop&#64;destroydrop&#46;com">&copy;2002-2003 Geir Landr&ouml;</a></p>

</body>

</html>

 

分享到:
评论

相关推荐

    JavaScript 树形菜单

    总的来说,JavaScript树形菜单是通过DOM操作和事件处理来实现的。在实际项目中,可能会结合使用前端框架如React、Vue或Angular,以及第三方库如jQuery UI或jsTree,以简化开发并提供更丰富的功能。在压缩包中的"树形...

    javascript 树形目录 大家可以看看学习··

    JavaScript树形目录是一种在网页应用中组织数据结构的方法,它以层级关系呈现,类似于计算机文件系统的目录结构。这种数据结构在各种应用场景中都非常常见,比如网站导航、文件管理器、组织图表等。在这个主题中,...

    javascript树形菜单

    javascript树形菜单

    百万节点javascript树

    "百万节点javascript树"项目专注于解决这个问题,允许开发者创建一个包含100万个节点的树。这种能力对于处理大量数据,如文件系统、组织架构或者复杂的依赖关系图,具有重要意义。 在JavaScript中,树通常通过对象...

    javascript树

    javascript写各种样式的树形菜单

    javascript 树形控件

    JavaScript树形控件是一种在网页中用于展示层次结构数据的交互式组件,它通常以节点的形式呈现,每个节点可以展开或折叠,展示其子节点。这种控件在各种应用场景中非常常见,例如文件目录浏览、组织结构展示、菜单...

    javascript 树形菜单

    总的来说,构建JavaScript树形菜单涉及的技术包括HTML结构设计、CSS样式控制、JavaScript DOM操作、事件处理、数据结构和算法(如遍历树形结构)、以及可能的异步加载和动画效果。通过这些技术的组合,我们可以创建...

    Javascript树

    JavaScript树是一种在Web应用中常用来展示层次结构数据的交互式元素。在JavaScript中实现树形结构,可以方便用户以图形化方式查看和操作数据,比如文件系统、组织架构或菜单系统。"Javascript树"通常涉及到DOM操作、...

    jsv.rar_javascript_javascript 树

    实现JavaScript树形菜单的基本步骤包括: 1. **定义节点对象**:创建一个Node类或对象,包含节点值、子节点数组和其他属性(如是否展开等)。 2. **构建数据结构**:根据实际需求,构建树的数据结构,即定义各个...

    带复选框JS树 Javascript树 JS树 树形菜单

    JavaScript树形菜单是一种在网页中实现层次结构数据展示的交互方式,它通常用于导航、文件管理、选项配置等场景。"带复选框"的JS树形菜单则更进一步,允许用户通过勾选复选框来选择或操作树节点,为用户提供了一种...

    JavaScript 树形目录 tree

    JavaScript树形目录(Tree)是一种数据结构,常用于在网页中展示层次化的信息,比如文件系统、组织架构或导航菜单。这种数据结构以节点的形式表示,每个节点可以有零个或多个子节点,形成一种“父节点-子节点”的...

    javascript树形控件

    JavaScript树形控件是一种在网页上实现层次结构展示的用户界面元素,通常用于展示目录结构、组织架构或者数据分类等。由于HTML标准中并未内置这样的组件,开发者需要借助JavaScript库或者自定义代码来创建这样的功能...

    超级简单的javascript树

    JavaScript树是一种数据结构,它代表了层次化的节点集合,这些节点通过父节点和子节点的关系组织起来,类似于自然界中的树状结构。在编程中,树常用于表示具有层级关系的数据,例如文件系统、HTML DOM(文档对象模型...

    javaScript树

    JavaScript树在Web开发中是一种常见的数据结构,常用于构建导航菜单、组织结构图或文件系统目录等。在JavaScript中实现树形结构,主要是通过对象和数组来模拟实际的树节点和层级关系。在这个场景下,"给定当前节点的...

Global site tag (gtag.js) - Google Analytics