对于小型的树型应用来说,dtree是一个不错的选择。

  • 先看一眼dtree给的例子

  • 构造静态树

首先引入css文件和js文件

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

构造静态树其实很简单

<script>/*   tree.add(id,pid,name,url,title,target,icon,iconOpen,open);id        :节点自身的idpid       :节点的父节点的idname      :节点显示在页面上的名称url       :节点的链接地址title     :鼠标放在节点上所出现的提示信息target    :节点链接所打开的目标frame(如框架目标mainFrame或是_blank,_self之类)icon      :节点关闭时的显示图片的路径iconOpen  :节点打开时的显示图片的路径open      :布尔型,节点是否打开(默认为false)------------------------------------------------东城区、西城区、崇文区、宣武区、朝阳区、丰台区、石景山区、海淀区、门头沟区、房山区、通州区、顺义区、 昌平区、大兴区、怀柔区、平谷区 、 密云县、延庆县------------------------------------------------*/</script><script type="text/javascript">tree = new dTree('tree');//创建一个对象.tree.add("1","-1","中国","","","","","",false);tree.add("11","1","北京","","","","","",false);tree.add("110","11","东城区","连接地址可以从数据库里面动态查询出来..","东城区","打开目标位置");tree.add("111","11","西城区","连接地址可以从数据库里面动态查询出来..","","链接在哪里显示");tree.add("112","11","崇文区","连接地址可以从数据库里面动态查询出来..","","mainFrame");tree.add("113","11","宣武区","","","_blank");tree.add("114","11","朝阳区","/.jsp","","mainFrame");tree.add("115","11","丰台区","/.jsp","","mainFrame");tree.add("116","11","石景山区","/.jsp","","mainFrame");tree.add("117","11","海淀区","/.jsp","","mainFrame");tree.add("118","11","门头沟区","/.jsp","","mainFrame");tree.add("119","11","房山区","/.jsp","","mainFrame");tree.add("120","11","通州区","/.jsp","","mainFrame");tree.add("121","11","顺义区","/.jsp","","mainFrame"); tree.add("122","11","昌平区","/.jsp","","mainFrame");tree.add("123","11","大兴区","/.jsp","","mainFrame");tree.add("124","11","怀柔区","/.jsp","","mainFrame");tree.add("125","11","平谷区","/.jsp","","mainFrame");tree.add("126","11","延庆县","/.jsp","","mainFrame");tree.add("127","11","密云县","/.jsp","","mainFrame");//==================================================tree.add("12","1","湖南","","","","","",false);tree.add("121","12","株洲","javascript:调用本页内的js函数","","mainFrame");tree.add("122","12","长沙");//====================================================tree.add("13","1","湖北","","","","","",false);tree.add("131","13","武汉","javascript:void()","","mainFrame");tree.add("132","13","宜昌","javascript:void()","","mainFrame");tree.add("133","13","孝感","javascript:void()","","mainFrame");//===================================================    tree.add("14","1","广东","","","","","",false);tree.add("141","14","佛山","javascript:void()","","mainFrame");document.write(tree);</script>

ok,静态树完成了,看一眼效果吧!是不是跟上面的一样!

  • API文档
Functions
add()
Adds a node to the tree.
Can only be called before the tree is drawn.id, pid and name are required.Parameters
Name Type Description
id Number Unique identity number.
pid Number Number refering to the parent node. The value for the root node has to be -1.
name String Text label for the node.
url String Url for the node.
title String Title for the node.
target String Target for the node.
icon String Image file to use as the icon. Uses default if not specified.
iconOpen String Image file to use as the open icon. Uses default if not specified.
open Boolean Is the node open. Example
mytree.add(1, 0, 'My node', 'node.html', 'node title', 'mainframe', 'img/musicfolder.gif');openAll()
Opens all the nodes.
Can be called before and after the tree is drawn.Example
mytree.openAll();closeAll()
Closes all the nodes.
Can be called before and after the tree is drawn.Example
mytree.closeAll();openTo()
Opens the tree to a certain node and can also select the node.
Can only be called after the tree is drawn.Parameters
Name Type Description
id Number Identity number for the node.
select Boolean Should the node be selected. Example
mytree.openTo(4, true);Configuration
Variable Type Default Description
target String true Target for all the nodes.
folderLinks Boolean true Should folders be links.
useSelection Boolean true Nodes can be selected(highlighted).
useCookies Boolean true The tree uses cookies to rember it's state.
useLines Boolean true Tree is drawn with lines.
useIcons Boolean true Tree is drawn with icons.
useStatusText Boolean false Displays node names in the statusbar instead of the url.
closeSameLevel Boolean false Only one node within a parent can be expanded at the same time. openAll() and closeAll() functions do not work when this is enabled.
inOrder Boolean false If parent nodes are always added before children, setting this to true speeds up the tree.

就是这么简单,一棵静态树就完成了。好下面加上动态的效果。

  • 初始化数据库并加入数据
DROP TABLE IF EXISTS `tree_table`;CREATE TABLE `tree_table` (`id` int(11) NOT NULL auto_increment,`nodeId` varchar(12) NOT NULL  ,`parentId` varchar(12) NOT NULL  ,`hrefAddress` varchar(85)  ,`nodeName` varchar(20)  ,PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk;

加入一些测试数据,注意nodeId和parentId是父子的关系。

insert  into `tree_table`(`id`,`nodeId`,`parentId`,`hrefAddress`,`nodeName`) values (1,'1','-1','http://www.sohu.com','北京');
insert  into `tree_table`(`id`,`nodeId`,`parentId`,`hrefAddress`,`nodeName`) values (1,'1','-1','http://www.sohu.com','海淀区');

  • 创建数据读取类和方法
Connection con = null;public Connection getConnection() {Connection conn = null;String url = "jdbc:mysql://localhost/test?useUnicode=true&characterEncoding=gbk";String user = "root";String password = "mytopicforever";try {if (conn == null) {Class.forName("com.mysql.jdbc.Driver").newInstance();conn = DriverManager.getConnection(url, user, password);}} catch (Exception e) {System.out.println("连接失败");return null;} finally {url = null;user = null;password = null;}return conn;}public ArrayList<Nodes> getNodeInfo() {String sql = "select nodeId ,parentId ,hrefAddress ,nodeName from tree_table order by id ";PreparedStatement pre = null;Connection conn = null;conn = getConnection();ResultSet rs = null;ArrayList<Nodes> list = new ArrayList<Nodes>();try {pre = conn.prepareStatement(sql);rs =pre.executeQuery();while (rs.next()){Nodes node = new Nodes();node.setHrefAddress(rs.getString("hrefAddress"));node.setNodeId(rs.getString("nodeId"));node.setParentId(rs.getString("parentId"));node.setNodeName(rs.getString("nodeName"));list.add(node);}rs.close();pre.close();conn.close();} catch (SQLException e) {e.printStackTrace();}finally{pre = null;conn = null;rs = null;}return list;}

数据库可以根据情况自己任意选择,也可以用hibernate或者ibaties,因为只是演示,所以用哪个来做都无所谓。

构造nodes类

private int id;private String nodeId;private String parentId;private String hrefAddress;private String nodeName;....set/get

  • 构造页面并且显示树型结构

首先配置好servlet用于读取数据并返回

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"><servlet><servlet-name>NodesPrint</servlet-name><servlet-class>com.handler.NodesPrint</servlet-class></servlet><servlet-mapping><servlet-name>NodesPrint</servlet-name><url-pattern>/NodesPrint</url-pattern></servlet-mapping><welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list>
</web-app>

servlet方法

 private static final long serialVersionUID = 1L;public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doPost(request, response);}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {System.out.println("调用了.........");request.setCharacterEncoding("utf-8");response.setContentType("text/xml;charset=utf-8");PrintWriter out = response.getWriter();DaoTest test = new DaoTest();ArrayList<Nodes> list=  test.getNodeInfo();if(list!=null&&list.size()>0){out.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");out.println("<nodes>");for(int i=0;i<list.size();i++){Nodes node = list.get(i);out.println("<node nodeId='"+node.getNodeId()+"' parentId='"+node.getParentId()+"' hrefAddress='"+node.getHrefAddress()+"'>"+node.getNodeName()+"</node>");}out.println("</nodes>");}}

接着就是构造页面了,在页面加载的时候利用jquery的ajax方法读取数据并且返回,然后显示到页面上

tree = new dTree('tree');//创建一个对象.$.ajax({ url:'NodesPrint', type:'post', //数据发送方式 dataType:'xml', //接受数据格式 error:function(json){alert( "not lived!");},async: false ,success: function(xml){$(xml).find("node").each(function(){ var nodeId=$(this).attr("nodeId");  var parentId=$(this).attr("parentId");  var hrefAddress=$(this).attr("hrefAddress");  var nodeName=$(this).text(); tree.add(nodeId,parentId,nodeName,hrefAddress,"","","","",false);});}});document.write(tree);

好了,现在到页面上去看一下效果吧,一棵动态树就这样完成了,是不是很简单,如果在业务量或者说数据量很小的情况下,这种方式是比较不错的,但是如果是大数据量的情况下建议采用异步加载的方案,就是每点击一个结点,读取子结点的数据并且动态的返回。

dtree和jquery构建树型结构相关推荐

  1. Nestable 可移动拖拽的树型结构的使用(jQuery)

    利用jQuery可以制作出很好的树型结构.这里介绍一款最近才找到使用的Nestable 可以拖动.  网页中的效果 http://dbushell.github.com/Nestable/ 具体详细介 ...

  2. 纯python统计基于orthofinder得到的系统发育树的关注点位置的树型结构

    对于某一个物种或某类物种在整个系统发育树中的位置存在一定争议的情况,使用直系同源基因构建单基因树,并对该物种或该类物种所在结构进行统计是可以对争议起到一定的解决作用的,在此留下全套流程和大家交流. 主 ...

  3. 【唠叨两句】如何将一张树型结构的Excel表格中的数据导入到多张数据库表中...

    小弟昨天遇到一个相对比较棘手的问题,就像标题说的那样.如何将一张树型结构的Excel表格中的数据导入到多张数据库表中,在现实中实际是七张数据库表,这七张表之间有着有着相对比较复杂的主外键关系,对于我这 ...

  4. EF架构~单表一对多集合的插入(树型结构)

    单表一对多关系很常见,它是一种树形结构,如系统菜单表,部门表,分类表,这些都可以做成单表一对多关系,而这些表做成一对多关系后,如果通过EntityFramework进行插入操作时,会很方便,EF会自动 ...

  5. C#实现树型结构TreeView节点拖拽的简单功能,附全部源码,供有需要的参考

    为什么80%的码农都做不了架构师?>>>    应用软件是否好用就体现在一些细节操作上,开发人员是否考虑到了很多细节,例如一个树形结构的数据若不支持拖拽功能那用起来会很糟糕一些,用户 ...

  6. go之树型结构深度理解补充

    go之树型结构深度理解补充 在上一篇中借用了 Ilija Eftimov 文章来讲解了tree的定义和一些方法.这篇文章主要是讲解在树型结构中如何判断节点与节点之间的关系. A节点是否是B节点的直接上 ...

  7. mysql 转成树_Mysql树型结构2种方式及相互转换

    Mysql实现树型结构,数据库上常见有2种方式:领接表.预排序遍历树(MPTT). 领接表方式-- 主要依赖于一个 parent 字段,用于指向上级节点,将相邻的上下级节点连接起来,id 为自动递增自 ...

  8. php删除树结构文件,树型结构列出目录中所有文件的php代码

    以树型结构列出指定目录里的所有文件,这样的话,目录下的所有文件便结构清晰的呈现在你的面前,有什么文件你一看便知,很方便的哦. 示例, php; auto-links:false;"> ...

  9. axure树形表格_Axure教程:可增删改的树型结构

    原标题:Axure教程:可增删改的树型结构 今天,教大家如何做一个树型结构,以及节点与节点之间相互交互的内容. 演示地址:http://b0bgsg.axshare.cn/#g=1&p=树 一 ...

最新文章

  1. 一步步教你下载centos镜像
  2. Mac笔记本中是用Idea开发工具在Java项目中调用python脚本遇到的环境变量问题解决...
  3. 训练图像预处理函数功能(paddle)
  4. Node.js 切近实战(八) 之Excel在线(文件权限)
  5. 64位java怎么安装使用_如何在64位Windows计算机上安装rJava与64位R一起使用?
  6. [CF917D]Stranger Trees[矩阵树定理+解线性方程组]
  7. Axis通过wsdd部署Web Service
  8. node.js 爬虫入门总结
  9. 培养女人味的12条妙方
  10. 软件开源是如何赚钱?
  11. 华为出售荣耀为不实消息,赵明曾在内部否认;迅雷前CEO陈磊涉嫌职务侵占罪被调查 ;Python 3.9发布|极客头条...
  12. 如何使用自动化与分析工具库创建 Excel 直方图
  13. opencv:基于颜色空间的肤色检测方法
  14. PC解决电子签名的方法
  15. 醍醐灌顶之-线性代数-矩阵论
  16. 视频号的直播玩法,手把手教你直播带货:国仁楠哥
  17. 瑞萨单片机iap串口升级boot工程的构建-学习记录
  18. win7旗舰版,KB4012212安装失败问题:
  19. 80后的初中生学计算机难吗,放弃所学计算机专业 爱做梦“80后”成面塑传人
  20. 如何进入UI设计行业 什么学习路线适合新手

热门文章

  1. 【每日一题】航班预订统计
  2. android Camera照相机技术(一)
  3. 16张思维导图+学习路线图,囊括所有Python基础,可打印
  4. matlab与python 语言区别总结(1)_matlab与python 语言区别总结(1)
  5. python输出多行对齐_如何用python3输出print对齐?
  6. java自动化开发_Java自动化开发指南
  7. 怎么调节手机的刷新率_高刷新率屏幕为何开始流行起来?
  8. 网络天才网页中文版_LVMH 旗下奢侈品电商 24S 的中文版正式上线,还有带来“双 11”优惠...
  9. mysql tree 修改_13.1 设置更改root密码 13.2 连接mysql 13.3 mysql常用命令
  10. LeetCode (12.整数转罗马数字)JAVA StringBuffer