dTree无限级目录树和JQuery同步ajax请求

简介: 以前都是用JQuery对树的支持来实现目录树的,近来闲来无事就弄了下dTree,感觉其无限级目录还是挺好的,而且它的使用也比较方便,基本上就是先把要用的js文件即dtree.js和css文件dtree.

以前都是用JQuery对树的支持来实现目录树的,近来闲来无事就弄了下dTree,感觉其无限级目录还是挺好的,而且它的使用也比较方便,基本上就是先把要用的js文件即dtree.js和css文件dtree.css引入,另外就是它默认的图片,当然这些图片都是可以自己指定的,它的css样式也可以自己改变的!

 

关于dTree就先谈谈它的node,dTree的node的构造方法可以指定下列参数,

			id //唯一标识,数字型
			pid//父节点的id,如果是根结点那就只能是-1,一般来讲只有一个最顶层的根结点 
			name//结点的名字,字符串类型,在页面上显示出来的标签. 
			url//字符串类型,表示当点击该叶子结点的时候访问哪个URL. 
			title//title,字符串类型,鼠标进入时显示的字符串. 
			target//字符串类型,超链接的目标位置. 
			icon //字符串类型,表示该结点图标的图片路径,不指定则使用默认的
			iconOpen//结点打开时候的图片路径,不指定则使用默认的 
			open//boolean类型,表示初始状态是否是打开的 

 如:

mytree.add(1, 0, 'My node', 'node.html', 'node title', 'mainframe', 'img/musicfolder.gif');


 

 

有了node以后就是构建树了

//引入了dtree.js后,就可以使用new dTree()了
myTree = new dTree();//这样就新建了一个dTree了,
//新建了dTree以后就是把刚建的node给添进去了,
mytree.add(1, 0, 'My node', 'node.html', 'node title', 'mainframe', 'img/musicfolder.gif');

 

在最后还可以指定一些配置参数:

 

			target//所有结点的目标 
			folderLinks//非叶子结点是否也是可以链接的,默认是true 
			useSelection//结点是否可以被选择,默认true. 
			useCookies//是否使用cookies来记录当前树的状态,默认是true 
			useLines//是否用线来画树,默认是true 
			useIcons//是否使用图标来构建树,默认是true 
			useStatusText//是否在状态栏显示结点的名字,而不是在URL的位置显示,默认是false
			closeSameLevel//是否同时只能有一个文件夹处于打开状态,默认为false,当为true的时候关闭所有的文件夹和打开所有的文件夹将不会起作用
			inOrder//是否先添加父结点再添加子节点,  默认为false,为true可以加快加载速度
			
			//例如:
			mytree.config.target = "mytarget";

 

像这些结点的相关信息,我们一般都是要从后台来得到的,或者从数据库,或者从配置文件,如果加上复杂的权限控制就得每次都到后台取一次了,
  而从后台得到这些数据的话一般常用的是以ajax请求取得json格式的数据,然后在页面上就可以非常方便的使用了,但是使用ajax请求的时候
  就会有一个问题出现了,那就是一般的ajax请求都是异步的,这时候,页面不会等ajax的请求返回就已经往下面执行了,等ajax请求返回的时候
  页面已经不能再使用其返回的数据进行操作了,所以这个时候需要使用ajax的同步请求了!ajax的同步请求很简单只要在ajax的请求的时候加上一个
  区别于ajax请求类型的参数就行了,一般都是async,像JQuery的用法就是这样的:

$.ajax( {
				url : "module/geneMenu",
				async : false//同步,等这个请求完成后才继续往下执行,这样myTree才能使用返回来的数据
			});

 使用了ajax的同步请求以后,页面在解析到ajax请求的时候就会等ajax请求返回以后再继续往下面执行,这样就可以利用
  ajax的返回值来进行对dTree的node的操作了!

 

还有一个问题就是我们常常会利用Frame来将页面进行布局成左边是menu栏,而右边是主页面,上边是一些基本信息这样的结构
  这样我们就需要在点击menu栏的叶子结点时,在mainFrame里面显示请求返回后的内容,其实要实现这个要求挺简单的,只需要
  把node的target指定为mainFrame的name即可

 

下面是一段完整的代码:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
	<head>
		<title>menu</title>

		<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
		<meta http-equiv="description" content="this is my page">
		<meta http-equiv="content-type" content="text/html; charset=UTF-8">

		<!--<link rel="stylesheet" type="text/css" href="./styles.css">-->
		<link rel="stylesheet" type="text/css" href="css/dtree.css">
		<style type="text/css">
			html,body {
				background:#afa;
			}
		</style>
		<script type="text/javascript" src="js/dtree.js"></script>
		<script type="text/javascript" src="js/jquery.js"></script>
	</head>

	<body>
		<div>
		<script type="text/javascript">
		
			myTree = new dTree('myTree');
			$.ajax( {
				url : "module/geneMenu",
				async : false,//同步,等这个请求完成后才继续往下执行,这样myTree才能使用返回来的数据
				dataType: "json",
				success: function(myData) {
					for ( var i = 0; i < myData.length; i++) {
						var obj = myData[i];
						//right是window.parent的一个frame的name
						myTree.add(obj.id, obj.parentId, obj.name, obj.url, obj.name, "right");
					}
					document.write(myTree);
				}
			});
			myTree.config.target = "right";//right是window.parent的一个frame的name
			myTree.config.useCookies = false;
			myTree.config.inOrder = true;
			
		</script>
		</div>
	</body>
</html>

 

 

目录
相关文章
|
1月前
|
XML 前端开发 JavaScript
|
2月前
|
JSON JavaScript 前端开发
《进阶篇第6章:vue中的ajax》包括回顾发送ajax请求方式、vue-cli脚手架配置代理服务器、vue-resource
《进阶篇第6章:vue中的ajax》包括回顾发送ajax请求方式、vue-cli脚手架配置代理服务器、vue-resource
61 22
|
2月前
|
前端开发 JavaScript
回顾前端页面发送ajax请求方式
回顾前端页面发送ajax请求方式
39 18
|
2月前
|
前端开发 JavaScript Java
第6章:Vue中的ajax(包含:回顾发送ajax请求方式、vue-cli脚手架配置代理服务器)
第6章:Vue中的ajax(包含:回顾发送ajax请求方式、vue-cli脚手架配置代理服务器)
83 4
|
2月前
|
前端开发 JavaScript 数据处理
JQuery 拦截请求 | Ajax 请求拦截
【10月更文挑战第4天】
126 1
|
3月前
|
JSON 前端开发 JavaScript
jQuery AJAX 方法
jQuery AJAX 方法
36 1
|
3月前
|
JSON JavaScript 前端开发
Jquery常用操作汇总,dom操作,ajax请求
本文汇总了jQuery的一些常用操作,包括DOM元素的选择、添加、移除,表单操作,以及如何使用jQuery发送Ajax请求,涵盖了GET、POST请求和文件上传等常见场景。
|
3月前
|
JSON 资源调度 JavaScript
Vue框架中Ajax请求的实现方式:使用axios库或fetch API
选择 `axios`还是 `fetch`取决于项目需求和个人偏好。`axios`提供了更丰富的API和更灵活的错误处理方式,适用于需要复杂请求配置的场景。而 `fetch`作为现代浏览器的原生API,使用起来更为简洁,但在旧浏览器兼容性和某些高级特性上可能略显不足。无论选择哪种方式,它们都能有效地在Vue应用中实现Ajax请求的功能。
47 4
|
5天前
|
JavaScript 前端开发
jQuery和CSS3滑动展开菜单按钮插件
这是一款jQuery和CSS3滑动展开菜单按钮插件。该滑动展开菜单按钮在用户点击主菜单按钮之后,子菜单以滑动的方式依次展开
39 21
|
6天前
|
JavaScript
jquery图片和pdf文件预览插件
EZView.js是一款jquery图片和pdf文件预览插件。EZView.js可以为图片和pdf格式文件生成在线预览效果。支持的文件格式有pdf、jpg、 png、jpeg、gif。
36 16