DHTMLXTree 读取 xml (入门版)

    这几天被分到在js调用xml文件显示在界面。从网上搜了很多资料,看了乱七八糟的,官方的API真的很扯淡,你说英语也就罢了,写的那么简单,你都不知道这个参数在里面怎么用,哎,不过总算搞出来了。

------------------------------------------------------------------------------------------------------

DHtmlXTree 开发包:

点击打开链接

DHtmlXTree 简单API介绍(中文):

点击打开链接

------------------------------------------------------------------------------------------------------   


具体是这么实现的:

   1.在一个html文件中有一个table用于将来显示内容的。

   2.通过Dhtmextree构造个tree,然后会显示在界面上一个tree

   3.当点击tree的某个节点时,右侧的tabel会动态显示当前节点下的自定义数据信息。

   4.可以动态修改,修改了点击应用,会修改tree的自定义数据。

   5.点击确定的话,回调用我写过的QT写XML文件的插件,然后把新的tree写入到xml中(因为我主要是做QT的,整个系统中都是用的QT的东西,就调用QT的插件了。PS:Dhtmextree写xml的方法我找了一下,可是没有多少能写的很好的,大部分是调用java的Dom4j,当然像我这样调用QT的也可以。自己看着办吧。)

具体如下:

1.要读取的XML格式(即Dhtmlxtree能读取的标准格式)

  <?xml version="1.0" ?> 
   <tree id="0">
      <item id="1" open="1" text="工作目录" im0="leaf.gif" im1="folderOpen.gif" im2="folderClosed.gif">
         <item id="11" text="工作目录" im0="leaf.gif" im1="folderOpen.gif" im2="folderClosed.gif">
         <userdata name="value">C:\smart</userdata> 
         </item>
     </item>
     <item id="2" open="1" text="数据服务器地址" im0="leaf.gif" im1="folderOpen.gif" im2="folderClosed.gif">
         <item id="21" text="地址" im0="leaf.gif" im1="folderOpen.gif" im2="folderClosed.gif">
           <userdata name="value">127.0.0.1</userdata> 
         </item>
         <item id="22" select="1" text="端口号" im0="leaf.gif" im1="folderOpen.gif" im2="folderClosed.gif">
            <userdata name="value">124</userdata> 
         </item>
     </item>
     <item id="3" open="1" text="集成软件路径" im0="leaf.gif" im1="folderOpen.gif" im2="folderClosed.gif">
        <item id="31" text="路径" im0="leaf.gif" im1="folderOpen.gif" im2="folderClosed.gif">
           <userdata name="value">C:\smart\plug\</userdata> 
         </item>
        <item id="32" text="变量" im0="leaf.gif" im1="folderOpen.gif" im2="folderClosed.gif">
           <userdata name="value">23</userdata> 
     </item>
   </item>
  </tree>


2.Dhtmlxtree要在js中使用,需要依赖几个官方的js文件,你可以百度一下Dhtmlxtree,下载之后解压,目录下 htmlxTree\sources 为要用到得资源。当然还有demo等,这些都不用说了。
 就简单读取xml话,我们需要dhtmlxtree.js、 dhtmlxcommon.js、dhtmlxtree_xw.js这三个文件,所以考到你自己的地方,然后包含进html文件中(<script type="text/javascript" src="scripts/dhtmlxtree.js"></script>)

head中加入如下:

<script type="text/javascript" src="scripts/dhtmlxtree.js"></script>
<script type="text/javascript" src="scripts/dhtmlxcommon.js"></script>
<script type="text/javascript" src="scripts/dhtmlxtree_xw.js"></script>


这就像java中的import,C++/QT中include一样,你懂得……

3.建个table,用于放你读出来的东西(很好理解吧)

  

<div align="center">

			<form name="subform" οnsubmit="optionsubmit()">
				
				<table width="100%" height="400" cellpadding="0" cellspacing="0"
					border="1" bordercolor="#0000FF" 
					background="images/bg33.PNG">
					<tr>
						<td id=item width="30%">
						</td>
						<td valign="top" align="left">
							 <FIELDSET>
								 <br />
								    配置参数:
								 <br />
								    <input name="property" type="text" size="54">
							  </FIELDSET>
							
							  <table width="100%" height="80%">
							   	<tr>
										<td valign="bottom" align="right">
												<input type="button" onClick="optionapply();"  name="used" value="应用" id="buttonsub"/>
										</td>
									</tr>
								</table>
						</td>
					</tr>
				</table>
				
				<table width="100%">
					<tr>
						<td valign="top" align="right">
							<input type="submit" name="submit" value="确定" id="buttonsub" />
							<input type="reset" name="reset" value="取消" />
						</td>
					</tr>
				</table>
				
			</form>
		</div>

注意几处标注的地方:subform是个表单的名字,item是最重要的,我们接下来要创建一个tree,tree的名字就叫item,这样创建的tree就会主动的现实在表格中了。


4.创建Dhtmlxtree

<script>
	var tree;
	
	//这是创建树和赋值树,一起执行了
        tree = new dhtmlXTreeObject("item", "100%", "100%", 0);
  
	//设置图标的样式,在你下载的dhtmlxtree中有,就是将来显示的小图标是什么风格的
	tree.setImagePath("imgs/csh_vista/");
        //显示图标吗?
	tree.enableTreeImages("true"); 
       //显示连接线吗?
	tree.enableTreeLines("true"); 

	//加载xml文件,这是最主要的,就是能读取出xml中的内容,生成树,但是要全路径哦!
	tree.loadXML(C:/xml/option_settings.xml);

	//设置点击事件,onTaskDataTypeSelected是一个js函数,接下来介绍
	tree.setOnClickHandler(onTaskDataTypeSelected);
</script>

到此为止,我们就生成了一个tree了,并且能显示在界面了(由于单位要求,所以不能贴上截图,见谅)

5.有了tree,那么我们还要得到tree中的信息,就是上面xml中userData中的信息。

  开始写鼠标点击tree节点的事件了:

	function onTaskDataTypeSelected() {
                //拿到当前被选择的节点,赋值给current_id(已在前面定义过)
		var itemid = tree.getSelectedItemId();
		current_id = itemid;
                //拿到当前节点的目录曾
		current_tree_level = tree.getLevel(current_id);
                //switch语句,你懂得
		switch (current_tree_level) {
		case 1:
		return;
		case 2:
                       //拿到自定义数据(参数:节点id,和自定义数据的名称(和前面的xml对应))
			var datavalue = tree.getUserData(current_id, "value");
                         //显示在<input>框中
			document.subform.property.value = datavalue;
			return;
		}//end switch

	}


6.修改tree的自定义数据
function optionapply() {
		var updatevalue = document.subform.property.value;
		tree.setUserData(current_id, "value", updatevalue);
	}

我想这就不用加注释了吧。


7.从新写入xml(调用了QT插件)


	//submit atcion : update tree
	function optionsubmit() {
		var updatevalue = document.subform.property.value;
		tree.setUserData(current_id, "value", updatevalue);
		resettreexmlcontent();
	}

	//write tree to xml file
	function resettreexmlcontent() {

		var xmlpath =  getXmlFilePath();
		tree.setSerializationLevel(true, true);
		var getcontents = tree.serializeTree();
		//此处省略调用QT插件代码
		alert("successed");
	}
</script>


好了这就是整个流程了。另外说一点:

------------------------------------------------------------------------------------------------------

DHtmlXTree 开发包:

点击打开链接

DHtmlXTree 简单API介绍(中文):

点击打开链接

------------------------------------------------------------------------------------------------------   


刚接触这个东西,具体还不太理解,难免有错误之处,请不吝指正。

另:今天收到新任务,说右侧用table不可以,让用dhtmlform,接下来搞一下,可能会在下一篇日志中提及!



  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
dhtmlXTree进行一个小的扩展 需求1: 动态生成树形菜单,每个节点都有各自的URL地址,单击不同的节点框架页的右侧跳转到该节点所对应的URL。(框架页说明:左边是树形菜单;右边是显示页面相应信息的页面) 分析: dhtmlXTree提供了很好的添加,删除节点的方法,故选择dhtmlXTree。 但是dhtmlXTree不能满足"每个节点都有各自的URL地址,单击不同的节点框架页的右侧跳转到该节点所对应的URL"这点需求,因次想到了对dhtmlXTree进行一个小的扩展,即在其节点对象原有属性的基础上,再添加两个扩展属性。具体操作如下: 1、找到定义节点对象的那个函数(或方法) function dhtmlXTreeItemObject(itemId,itemText,parentObject,treeObject,actionHandler,mode) 修改为 function dhtmlXTreeItemObject(itemId,itemText,parentObject,treeObject,actionHandler,mode,url,target) 并在方法体中添加赋值语句:this.itemURL=url;this.itemTarget=target; 2、然后修改所有与dhtmlXTreeItemObject有关(直接或者间接相关)的方法: _attachChildNode,insertNewItem,insertNewChild,insertNewNext,_recreateBranch,_parseXMLTree 注:_parseXMLTree方法是与loadXML,loadXMLString相关的。 在这些方法中生成节点的语句中添加相应的参数和语句,以支持新添加的属性itemURL,itemTarget。 需求2: 为dhtmlXTree树上的每一个节点添加右键菜单。附:在树上的节点上点右键时才会生成菜单,空白区域单击时不会生成菜单。 分析: 1、用 dhtmlXTree + dhtmlxmenu 实现。 2、 用dhtmlxmenu生成菜单的部分代码: var menu = new dhtmlXMenuObject(); menu.setImagePath("imgs/"); menu.setIconsPath("images/"); menu.renderAsContextMenu(); menu.loadXML("dhtmlxmenu.xml?e="+new Date().getTime()); menu.addContextZone("treeboxbox_tree"); menu.addContextZone方法是为了把菜单添加到指定区域。 3、dhtmlXTreeObject.prototype._createItem方法是构造树形菜单上元素的具体实现方法。看这个方法的具体操作,可以发现它为每一个节点构建了一个table,节点的内容(即名字)放置在一个span中。 4、考虑到dhtmlxmenu实在指定的区域构建菜单,所以可以为dhtmlXTree树上的每一个节点添加右键事件,在这个右键事件里获得该节点对象所对应的区域,然后在这个区域内构建Menu菜单。 难点和解决方案: 1、怎样获得dhtmlXTree树上的每一个节点对象所对应的区域?(dhtmlXTreeObject.prototype._createItem方法没有为这个节点的span设置id) 解决方法: 在dhtmlXTreeObject.prototype._createItem方法中添加一个为span设置id的语句: 即: 在itemObject.span=document.createElement('span'); itemObject.span.className="standartTreeRow"; 后,新添加一句 itemObject.span.id="treeNode_"+itemObject.id;//为这个span新增一个Id属性 2、为dhtmlXTree树上的每一个节点添加右键事件,在这个右键事件里获得该节点对象所对应的区域,然后在这个区域内构建Menu菜单。 解决方法: a、为dhtmlXTree树上的每一个节点添加右键事件: tree.setOnRightClickHandler(treeOnRegihtClick);//右键事件 b、构建Menu菜单: var menu = new dhtmlXMenuObject(); function treeOnRegihtClick(id){ alert("右键 "+" span.id:"+tree.getItem(id).span.id); menu.setImagePath("imgs/"); menu.setIconsPath("images/"); menu.renderAsContextMenu(); menu.loadXML("dhtmlxmenu.xml?e="+new Date().getTime()); menu.addContextZone(tree.getItem(id).span.id);alert("width:"+tree.getItem(id).span.clientWidth); //var X=tree.getItem(id).span.getBoundingClientRect().left; //var Y=tree.getItem(id).span.getBoundingClientRect().top; var X=document.getElementById('mouseXPosition').value;//获得鼠标的横坐标位置 var Y=document.getElementById('mouseYPosition').value;//获得鼠标的纵坐标位置 menu.showContextMenu(X,Y);//调用showContextMenu方法显示菜单 说明:如果这儿不加上这条语句的话,第一次点击右键时只能生成菜单,但是显示不出菜单,下次点击右键Menu菜单才能弹出。 //menu._showContextMenu(X,Y,tree.getItem(id).span.id); } c、用 javascript 获取当页面上鼠标(光标)位置 <script type="text/javascript"> // 说明:获取鼠标位置 function mousePosition(ev){ if(ev.pageX || ev.pageY){ return {x:ev.pageX, y:ev.pageY}; } return { x:ev.clientX + document.body.scrollLeft - document.body.clientLeft, y:ev.clientY + document.body.scrollTop - document.body.clientTop }; } document.onmousemove = mouseMove; function mouseMove(ev){ ev = ev || window.event; var mousePos = mousePosition(ev); document.getElementById('mouseXPosition').value = mousePos.x; document.getElementById('mouseYPosition').value = mousePos.y; } </script> 页面上放置两个隐藏域存放鼠标的位置:<input type="hidden" id=mouseXPosition><input type="hidden" id=mouseYPosition>

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值