`
xuxiaolei
  • 浏览: 150560 次
  • 性别: Icon_minigender_1
  • 来自: 彩虹之巅
社区版块
存档分类

js dtree的简单应用

阅读更多

前几天在javaeye上看到有这样一个帖子(http://www.iteye.com/topic/245728),今天把我的解决代码贴在我的blog中。数据库是这样的记录
year,month,title
2004 3      第一条标题
2004 5      第二条标题
2005 6      第三条标题
2005 6      第四条标题
2002 6      第五条标题
要求在前台以年,月,日,树状展示,比如点击2004,然后出来下面所有的月,在点击月,出来下面所有的标题

这里算是做一个dtree的简单应用吧。

package app;

public class Title {
	private int year;
	private int month;
	private String name;
	
	public Title() {
	}
	
	public Title(int year, int month, String name) {
		this.year = year;
		this.month = month;
		this.name = name;
	}
	
	public int getYear() {
		return year;
	}
	public void setYear(int year) {
		this.year = year;
	}
	public int getMonth() {
		return month;
	}
	public void setMonth(int month) {
		this.month = month;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
}

 

package app;

public class TreeDaoImpl {
	
	public Title[] queryAllTitle() {
		Title[] titles = new Title[5];
		titles[0] = new Title(2004, 3, "第一条标题");
		titles[1] = new Title(2004, 5, "第二条标题");
		titles[2] = new Title(2005, 6, "第三条标题");
		titles[3] = new Title(2005, 6, "第四条标题");
		titles[4] = new Title(2002, 6, "第五条标题");
		
		return titles;
	}
}

 

package app;

import java.util.*;

public class Node {
	private Object data;
	private Node parent;
	private List<Node> children;
	
	public Node() {
		children = new ArrayList<Node>();
	}
	
	public Node(Object data, Node parent) {
		this.data = data;
		this.parent = parent;
		children = new ArrayList<Node>();
	}
	
	public boolean hasChildren() {
		return children.size() != 0;
	}
	
	public boolean containChildData(Object data) {
		return queryChildByData(data) != null;
	}
	
	public Node queryChildByData(Object data) {
		Node r = null;
		for(Node node : children) {
			if(node.getData().equals(data)) {
				r = node;
				break;
			}
		}
		
		return r;
	}
	
	public void addChild(Node node) {
		children.add(node);
	}
	
	public Object getData() {
		return data;
	}

	public void setData(Object data) {
		this.data = data;
	}

	public Node getParent() {
		return parent;
	}

	public void setParent(Node parent) {
		this.parent = parent;
	}

	public List<Node> getChildren() {
		return children;
	}

	public void setChildren(List<Node> children) {
		this.children = children;
	}
}

 

package app;

public class MenuTreeBuilder {
	
	public MenuTreeBuilder(TreeDaoImpl dao) {
		this.dao = dao;
		idx = 1;
		buffer = new StringBuffer();
	}
	
	public void generateMenuTree(String rootName) {
		
		root = new Node(rootName, null);
		
		Title[] titles = dao.queryAllTitle();
		for(int i = 0; titles != null && i < titles.length; i++) {
			
			Node yearNode = null;
			Node monthNode = null;
			String year = String.valueOf(titles[i].getYear());
			String month = String.valueOf(titles[i].getMonth());
			
			if( !root.containChildData(year) ) {
				yearNode = new Node(year, root);
				root.addChild(yearNode);
			} else {
				yearNode = root.queryChildByData(year);
			}
			
			if( !yearNode.containChildData(month) ) {
				monthNode = new Node(month, yearNode);
				yearNode.addChild(monthNode);
			} else {
				monthNode = yearNode.queryChildByData(month);
			}
			
			monthNode.addChild(new Node(titles[i].getName(), monthNode));
		}

	}
	
	public String generateJS() {
		
		buffer.append("d = new dTree('d');\n");
		buffer.append("d.add(" + idx + "," + "-1, '" + root.getData().toString() + "');\n");
		
		privateGenerateJs(root);		
		return buffer.toString();
	}
	
	private void privateGenerateJs(Node parentNode) {
		int rootIdx = idx;
		for(int i = 0; i < parentNode.getChildren().size(); i++) {
			Node node = parentNode.getChildren().get(i);
			++idx;
			buffer.append("d.add(" + idx + "," + rootIdx + ", '" + node.getData().toString() + "');\n");
			
			privateGenerateJs(node);
		}
	}
		
	private TreeDaoImpl dao;
	private Node root;
	private int idx;
	private StringBuffer buffer;
}

 

package app;

public class Test {
	
	public static void main(String[] args) {
		TreeDaoImpl dao = new TreeDaoImpl();
		MenuTreeBuilder mtb = new MenuTreeBuilder(dao);
		mtb.generateMenuTree("年份");
		String s = mtb.generateJS();
		System.out.println(s);
	}
}

 最后,把程序生成的JS替换使用dtree的例子中的部分JS即可。当然,实际应用可能不是这个样子,这里只是做个例子,这个程序可以根据自己的需要更改。程序控制台输出

d = new dTree('d');
d.add(1,-1, '年份');
d.add(2,1, '2004');
d.add(3,2, '3');
d.add(4,3, '第一条标题');
d.add(5,2, '5');
d.add(6,5, '第二条标题');
d.add(7,1, '2005');
d.add(8,7, '6');
d.add(9,8, '第三条标题');
d.add(10,8, '第四条标题');
d.add(11,1, '2002');
d.add(12,11, '6');
d.add(13,12, '第五条标题');

 

附件中的图片是运行效果截图:

 

 

  • 描述: 运行效果截图
  • 大小: 8.8 KB
分享到:
评论

相关推荐

    Dtree JS脚本DEMO

    **Dtree JS脚本DEMO** 是一个基于JavaScript实现的树形菜单库,它提供了简单易用的功能,便于开发者在Web应用中构建层次结构清晰的菜单系统。在给定的压缩包文件中,包含了以下几个关键组件: 1. **dtree.css**: 这...

    JAVAscript dtree 树型菜单

    例如,一个简单的dTree初始化代码可能如下: ```javascript var treeData = { "root": [ { "text": "节点1", "children": [ {"text": "子节点1.1"}, {"text": "子节点1.2"} ] }, { "text": "节点2", ...

    js dtree无限级扩展的树形菜单.rar

    本文将深入探讨“js dtree无限级扩展的树形菜单”这一主题,这是一种基于JavaScript的树形菜单插件,适用于构建多层次、可扩展的导航系统。 首先,我们来了解“js dtree”的基本概念。js dtree 是一个JavaScript库...

    dtree

    简单应用dtree时,可以按照以下方式操作: 1. **加载数据**:根据业务需求,将后端返回的树状数据转换为dtree所需的格式。 2. **初始化组件**:调用dtree的构造函数,传入数据和配置项,创建树组件实例。 3. **绑定...

    原始dtree+右键dtree+复选框dtree

    原始dtree适用于简单的项目,但它可能缺乏一些高级特性,比如搜索、拖放或者右键菜单。 接下来是右键dtree,这是对原始dtree的一种增强,通过集成jQuery库,增加了右键上下文菜单功能。jQuery使得DOM操作更加简洁...

    javascript树形菜单Dtree插件

    Dtree是一款JavaScript插件,专为创建这样的树形目录而设计,它结合了实用性与美观性,使得在网页中实现交互式的树状菜单变得简单易行。 **Dtree的基本原理:** Dtree插件基于HTML、CSS和JavaScript构建,通过...

    JavaScript dtree

    在上述示例中,我们创建了一个简单的树结构,并用JavaScript实例化了dTree,传入了数据源(`#tree`元素)和主题。 dTree还支持通过JSON数据动态生成树结构,这对于从服务器获取数据非常有用。此外,它还提供了丰富...

    dtree jsp 中使用,dtree jsp 中使用

    &lt;script type="text/javascript" src="/js/dtree.js"&gt; ``` 2. **HTML结构准备** 创建一个`div`元素作为`dtree`的容器,为其设置一个ID,以便在JavaScript中引用: ```html &lt;div id="dtree"&gt; ``` 3. **生成...

    单选多选简单树形框架dtree

    这个框架的核心在于dtree.js文件,这是一个JavaScript脚本,包含了树形结构的逻辑处理和交互事件。dtree.css则负责样式设定,确保树形结构在页面上展示得美观且易用。img文件夹可能包含了一些用于表示展开/折叠状态...

    dtree和dtree_checkbox(dtree复选框)

    **dtree与dtree_checkbox: JS控件的深入解析** 在网页开发中,交互性和用户体验是至关重要的元素,而JavaScript(简称JS)作为客户端脚本语言,为实现这些功能提供了强大的支持。在这个话题中,我们将重点探讨两种...

    layui dtree树形结构

    1. **易用性**:layui dtree的API设计简单明了,开发者可以通过几行代码快速实现树形结构的展现。 2. **灵活性**:它可以自定义节点的展开、关闭、选中、禁用等多种状态,支持异步加载数据,满足各种业务需求。 3. *...

    dTree学习资料(源码、帮助文档、js文件、用例)

    dTree是一种广泛应用于Web开发中的JavaScript树形菜单库,它提供了丰富的功能,使得在网页上构建交互式的树状结构变得简单。这个压缩包文件包含了学习dTree所需的各种资源,包括源码、帮助文档、JavaScript文件以及...

    dtree实现树形结构

    "dtree"通常指的是用于构建和操作这种树形结构的JavaScript库。在JavaScript中实现树形结构可以帮助我们处理各种复杂的数据结构问题,如文件系统、组织架构、菜单导航等。下面我们将深入探讨如何使用dtree库来实现和...

    dtree 使用详细介绍

    安装dtree非常简单,首先解压dtree源码包`dtree.zip`,其中包含了必要的资源文件,如图像文件、API文档、CSS样式表、JavaScript脚本和示例文件。将这些文件放置在项目的webroot目录下,然后在需要使用dtree的HTML或...

    Dtree和一个简单的JSP实例

    在本实例中,Dtree被应用于一个简单的JavaServer Pages (JSP)项目,为初学者提供了一个直观的学习入口。 JSP是Java平台上的服务器端技术,用于创建动态web内容。它允许开发者将HTML、CSS、JavaScript与Java代码混合...

    javascript树型菜单(Dtree和Xtree)

    在前端开发中,Dtree和Xtree是两种常见的JavaScript实现树型菜单的库。下面将详细介绍这两个库以及相关知识点。 1. Dtree(Dynamic Tree) Dtree是一个轻量级的JavaScript库,它提供了创建动态树形菜单的功能。这...

    dtree实例,包含源码

    `dtree`的JavaScript包是实际应用于网页中的代码,可能包含`.js`文件或模块化格式如`.es6.js`、`.mjs`等。这些包通常包含了`dtree`的全部功能,开发者可以通过引入包并在JavaScript代码中调用相关方法来使用决策树。...

    dtree教程

    以下是一个简单的`dtree`使用示例: ```html &lt;!DOCTYPE html&gt; &lt;title&gt;dtree Demo &lt;link href="dtree.css" rel="stylesheet" type="text/css"/&gt; &lt;div id="treeContainer"&gt;&lt;/div&gt; &lt;script src="dtree.js"&gt; ...

    dtree使用文档,教你怎么用dtree

    `dtree`作为一款轻量级的JavaScript插件,以其简单易用、高度自定义的特点,在前端开发领域广受欢迎。本文将深入解析`dtree`的使用方法,帮助开发者快速上手,灵活运用。 #### CSS样式定义 `dtree`的外观和布局主要...

    dtree树形菜单的简单使用举例

    在本例中,我们将探讨如何简单地使用`dtree`来创建和应用树形菜单。 **基本使用步骤** 1. **引入dtree库** 在HTML文件中,首先需要通过`&lt;script&gt;`标签引入`dtree`的JavaScript库。通常,这可以通过下载库文件并将...

Global site tag (gtag.js) - Google Analytics