`
wangyalei
  • 浏览: 53169 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

js+xml = 动态树形

    博客分类:
  • AJAX
阅读更多



 js 来操控xml 加上html 标签中的dl dt 等树形标签,来模拟一下动态的树形结构。

 

1: 首先构造树形数据 xml

   

<?xml version="1.0" encoding="utf-8"?>
<books>
		<kins id="修真">
			<book id="001">
					<name>《唯我独仙》</name>
					<author>唐家三少</author>
			</book>
			<book id="002">
					<name>《飘渺之旅》</name>
					<author>萧鼎</author>
			</book>
		</kins>
		
		<kins id="都市">
			<book id="001">
					<name>《坏蛋是怎么练成的》</name>
					<author>六道</author>
			</book>
			<book id="002">
					<name>《围城》</name>
					<author>郭敬明</author>
			</book>
		</kins>
		
		<kins id="玄幻">
			<book id="001">
					<name>《光之子》</name>
					<author>唐家三少</author>
			</book>
			<book id="002">
					<name>《神墓》</name>
					<author>无名</author>
			</book>
		</kins>
		
		<kins id="网游"></kins>
</books>

 

  2 :用js 来 加载xml 生成树形 用dom加载到 页面端

 

// JavaScript Document

	//analyse
	 
	 // 声明一个Dom 对象
	 var  DomObj ;
	 //声明根根节点 (这里的根节点 不和xml 中指得一样 这里是整个 xml 文本)
 	 var  root ;
	 //浏览器
	
	// stup 1  
	/*\
	   根据不同的浏览器 进行
	   解析xml 
	 */
	 
	 // stup 1.0 判断浏览器 
	 function getUserAgent()
	 {
		 var userAgent = navigator.userAgent;
	
		 if(userAgent.indexOf("IE")!=-1)
		 {
			 return "IE"
		 }else if(userAgent.indexOf("Firefox")!=-1)
		 {
			 return "fire";
		 }
	
	}
	 
	 
	 // stup 1.1 通过不同的 浏览器 进行 实例出不同的 dom对象
	 
	  // 针对不同版本的IE 
	  var IEDomObj = [
						"Msxml2.DOMDocument.5.0",
						"Msxml2.DOMDocument.4.0",
						"Msxml2.DOMDocument.3.0",
						"Msxml2.DOMDocument",
						"Microsoft.XmlDom"
					  ];
	 
	 function InstanceDom()
	 {
			 var browser = getUserAgent();
			 
		 switch(browser)
		 {
			 case  "IE" :
					
			for(var i in IEDomObj)
			{
			  try{
			   DomObj = new ActiveXObject(IEDomObj[i]);	
			   }catch(e)
			   {
				 continue;
			   }
			}
			 break;
			 case "fire"  :
				 DomObj = document.implementation.createDocument("","",null);
			 break;
		 }
		 
		 if(DomObj)
		 {
	         DomObj.async = false;
		 }
		 
	 }
	 
	 
	 //stup 1.2 通过dom 对象来 在内存中加载 xml 
	 
	   function onLoadXml()
	   {
		    InstanceDom();
			//加载
			DomObj.load("book.xml");
			
			//得到 xml所有节点
			root = DomObj.documentElement;
			
			
	   }
	 
	 // stup 2 构建树的模型 
	 
	 /*
	   	通过 html  的标签  来 构建出树的模型
		在 通过 dom 解析 xml 的数据 来 填充进去
	 */
	 
	  function initTree()
	  {
		  //stup 2.0
		  var bookTreeDate = "<dl id='booksDL'>"
		  					 +"<dt><img src='imgs/books.png'/>分类管理&nbsp;</dt>"
							 +"<dd id='topDD'>";
		  
		  var bookDiv = document.getElementById("booksDiv");
		  var kindNodes = root.getElementsByTagName("kins");
		 // alert(kindNodes);
		  var kindNodesNum = kindNodes.length;
		  for( var i = 0 ; i < kindNodesNum ; i++)
		  {
		  		 var kindType = kindNodes[i].getAttribute("id");
				 bookTreeDate += "<dl id='"+kindType+"DL' class='collapse'>"
				 				+"<dt id='"+kindType+"DT'"
								+"title = '"+kindType+"''"
				if(kindNodes[i].childNodes.length > 0)
				{
					bookTreeDate += ">"
								 +"<img src='imgs/collapse.png' class='nodeImage'"
								 +"onclick='chageNodeState(this,"
								 +"document.getElementById(\""+kindType+"DT\"));'/>";
				}else
				{
					bookTreeDate+="class='noDateNode'>";
				}
				
				bookTreeDate +=kindType + "&nbsp;"
							 +"<img id='"+kindType+"Img' class='operaterImg' src='imgs/add.png'>"
							 +"<a href='#' onclick='javaScript:addBook(\""+kindType+"DL\");'>"
							 +"增加</a></dt>";
				bookTreeDate +="</dl>";
		  }
		  
		  bookTreeDate+="</dd></dl>";
		  bookDiv.innerHTML=bookTreeDate;
	  }
	  
	  
	  // stup 2.1 动态的改变 节点之间的 样式 
	  function chageNodeState(img,dtNode)
	  {
		
		
		 var dlNode = dtNode.parentNode;
		 var src = img.src;
		 var state = null;
		 if(src.indexOf("collapse") != -1)
		 {
			 state = "expand";
	     }else
		 {
			 state = "collapse";
		 }
		 dlNode.className = state;
		 img.src = "imgs/"+state+".png";
		
	  }
	   
	   
	   // stup 2.3 利用dom 来操作xml  来初始化数据
	   
	    function initTreeDate()
		{
			var kindNodes = root.getElementsByTagName("kins");
			var kindNodesNum = kindNodes.length;
		  for( var i = 0 ; i < kindNodesNum ; i++)
		  {
			 var kindType = kindNodes[i].getAttribute("id");
			 var dl = document.getElementById(kindType+"DL");
			 addDadate(kindNodes[i],dl);
		  }
			
		}
		
		function addDadate(xmlKindNodes,dlNode)
		{
			var bookNodes = xmlKindNodes.getElementsByTagName("book");
			//alert(bookNodes.length);
			var bookNum = bookNodes.length;
			for(var i = 0; i < bookNum ; i++ )
			{
				var dd = document.createElement("dd");	
				var bookInfoArr = [];
				dd.setAttribute("id",bookNodes[i].getAttribute("id"));
				bookInfoArr.push(bookNodes[i].getAttribute("id"));
				var bookName = bookNodes[i].getElementsByTagName("name")[0];
				var bookatuthor = bookNodes[i].getElementsByTagName("author")[0];
				switch(getUserAgent())
				{
					case "fire" : 
					  bookInfoArr.push(bookName.textContent);
					  bookInfoArr.push(bookatuthor.textContent);
					break;
					case "IE" :
					  bookInfoArr.push(bookName.text);
					  bookInfoArr.push(bookatuthor.text);
					break;
					default :
					break;
					
				}
				
				dd.innerHTML = getBookInfoDDHTML(dlNode,bookInfoArr);
				dlNode.appendChild(dd);
			}
		}
		
		
		// stup 2.4 将 xml 数据信息 转换为 html 信息
		
		function getBookInfoDDHTML(dlNode,bookInfoArr)
		{
			var ddHTML = "<img src='imgs/bookImg.png'/>"+bookInfoArr[1]
						+ "<img class='operaterImg' src='imgs/update.png'/>"
						+"<a href ='#' onclick=''>编辑</a>"
						+ "<img class='operaterImg' src='imgs/delete.png'/>"
						+"<a href ='#' onclick=''>删除</a>"
						+"<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"
						+"<img src='imgs/author.png'/>"+bookInfoArr[2];
				
				return 	ddHTML;	
		}
		
		
		
		//stup 3.0 用dom 在内存中操作xml
		function addBook(dlID)
		{
		//alert(dlID);
			//设置 添加页面的
			var bookInfo = window.showModalDialog("bookInfo.html",window,  
												  "dialogWidth:450px;dialogHeight:180px;scroll:no;resiz");
			var kindType = dlID.substring(0,dlID.lastIndexOf("DL"));
			if(bookInfo[0]!="")
			{
				//查询 利用xpath
				alert(bookInfo[1]);
				var xPathEl = "//kins[@id='"+kindType+"']";
				//alert(xPathEl);
				var xmlKindNode = null;
				switch(getUserAgent())
				{
					case "fire" : 
					 var xpe = new XPathEvaluator();
					 var nsResolver = xpe.createNSResolver(root);
					 xmlKindNode = DomObj.evaluate(xPathEl,DomObj,
										nsResolver,XPathResult.ANY_TYPE,null).iterateNext();
					break;
					case "IE" :
					   xmlKindNode = root.selectNodes(xPathEl).item(0);
					   alert(xmlKindNode);
					break;
					default :
					break;
					
				}
				
				//alert(xmlKindNode);
				//在页面上添加新的书籍列表
				var dlNode = document.getElementById(dlID);
				var ddNode = document.createElement("dd");
				ddNode.setAttribute("id",bookInfo[0]);
				ddNode.innerHTML=getBookInfoDDHTML(dlNode,bookInfo);
				if(xmlKindNode.getElementsByTagName("book").length ==0)
				{
				  
				   var dtNode = document.getElementById(kindType+"DT");
				   dtNode.className=null;
				   dtNode.innerHTML =
				   "<img src='imgs/collapse.png' class='nodeImage' onclick='javaScript:chageNodeState(this,document.getElementById(\""+dtNode.title+"DT\"));'/>"
				   +kindType+"&nbsp;"
				   +"<img class='operaterImg' src='imgs/add.png'/>"
				   +"<a href='#'  onclick='javaScript:addBook(\""+dlNode.id+"\");'>"
				   +"增加</a>";
			        
				  dlNode.appendChild(dtNode);
				  
			    }
				 
				 dlNode.appendChild(ddNode);
				 // 为内存中的xml 文档 对象添加 新的节点
				 var xmlBookNode = DomObj.createElement("book");
				 xmlBookNode.setAttribute("id",bookInfo[0]);
				 var xmlNameNode = DomObj.createElement("name");
				 var xmlAuthorNode = DomObj.createElement("author");
				switch(getUserAgent())
				{
					case "fire" : 
					    xmlNameNode.textContent = bookInfo[1];
						xmlAuthorNode.textContent = bookInfo[2];
					break;
					case "IE" :
					    xmlNameNode.text = bookInfo[1];
						xmlAuthorNode.text = bookInfo[2];  
					break;
					default :
					break;
				}
				
				xmlBookNode.appendChild(xmlNameNode);
				xmlBookNode.appendChild(xmlAuthorNode);
				xmlKindNode.appendChild(xmlBookNode);
				alert("编号为"+bookInfo[0]+"图书添加成功");
				alert(DomObj.xml);
			}
			
		}
	   
	  // init 初始化方法
	  function inIt()
	 {
		 onLoadXml();
		 initTree();
		 initTreeDate();
	 }

 效果如图:

  

  • 大小: 83.7 KB
  • 大小: 62.7 KB
分享到:
评论

相关推荐

    javascript+xml无线级树形菜单

    JavaScript 和 XML 无线级树形菜单是一种常见的网页交互设计,用于组织和展示复杂的数据结构,尤其是在需要层次化数据展示的场合,例如网站导航、文件系统或者数据库结构等。本知识点将深入探讨如何利用 JavaScript ...

    Ajax+jsp+MySQL实现动态树形菜单

    3. **编写JavaScript代码**:使用Ajax技术监听用户的交互事件,向服务器发送请求,接收响应数据,并在客户端动态渲染树形菜单。 4. **CSS样式设计**:为了美观,需要设计合适的CSS样式,使树形菜单看起来更直观、...

    使用JavaScript+XML+XSL创建树形目录

    本教程将详细介绍如何利用JavaScript、XML和XSL技术来构建这样的树形目录。 首先,我们需要理解这三种技术的基础概念: 1. **JavaScript**:这是一种运行在客户端的脚本语言,主要用于网页的交互性和动态效果,可以...

    Ajax+jsp+oracle实现动态树形菜单

    在IT行业中,动态树形菜单是一种常见的用户界面元素,它能以层次结构展示数据,使得用户可以方便地浏览和操作复杂的数据结构。本项目利用Ajax、JSP和Oracle数据库技术来实现这一功能,旨在提高用户体验并优化后台...

    javascript+xml树形菜单

    总结:通过 JavaScript 和 XML 结合,可以构建出动态的树形菜单,尤其是在早期的 Web 开发中。然而,考虑到现代浏览器的兼容性和性能优化,建议使用更现代的技术栈,如 jQuery、Vanilla JS、React 或 Vue 等,它们...

    JavaScript+XML实现垂直树形导航菜单

    全部代码来源于我近期的一个项目,客户要求论坛必须有侧边导航栏,我于是想到用框架来实现。"mainFrame"是主显框架的ID及name属性。读者可灵活修改。(作者注[2011年6月14日]:这是我三年前写的代码,代码质量比较差...

    jquery+servlet展示XML树形结构

    在本项目中,jQuery用于在用户界面动态创建和更新XML树形结构。例如,可以使用`.html()`方法来填充或改变HTML元素的内容,`.append()`方法添加新的节点,以及`.click()`等事件监听器来响应用户的交互。 其次,**...

    js+xml实现的复选框树 treeview checkbox

    总的来说,"js+xml实现的复选框树"是一个将JavaScript的动态特性与XML的数据描述能力相结合的实践案例,为前端开发者提供了构建交互式树形选择功能的一种方式。理解和掌握这种技术对于提升Web应用的用户体验有着积极...

    javascript操作xml生成树形菜单

    总结来说,通过使用JavaScript操作XML文档,我们可以动态地构建树形菜单。这个过程包括创建XML DOM对象,遍历XML结构,以及使用DOM API动态生成HTML元素来表示菜单结构。这个方法适用于需要根据动态数据生成导航菜单...

    java解析xml动态生成树形菜单结构

    前端部分,`JavaScript`库如`JSTree`(压缩包中的`JSTREE`可能就是这个库的文件)提供了丰富的API和插件,使得在浏览器中生成和操作树形菜单变得简单。`JSTree`支持JSON和XML等多种数据源,与后端的Java接口完美对接...

    ajax + div +js +xml+ servlet 实现无限级动态目录树(原创)

    这篇文章主要讲解如何使用Ajax、Div、JavaScript、XML以及Servlet技术来创建一个可以动态加载、展示无限层级目录结构的交互式树形组件。这个组件在网页应用中广泛用于文件管理、组织结构显示、导航菜单等场景。 **...

    jsp 很实用的JS+CSS多级树形展开菜单_网页代码

    本知识点主要探讨如何利用JavaScript(JS)和层叠样式表(CSS)在JSP(JavaServer Pages)环境中创建这样一个实用的多级树形展开菜单。 首先,我们需要理解JSP的基础。JSP是一种动态网页技术,允许开发者将Java代码...

    xml文件树形显示,可添加删除修改xml节点

    在处理XML文件时,为了更好地理解和操作XML文档,通常会将其以树形结构显示,这种方式能直观地展示XML文档的层级关系。 在IT领域,"xml文件树形显示"涉及到的技术主要包括XML解析器和数据可视化。XML解析器负责读取...

    js+jsp树形菜单

    总之,"js+jsp树形菜单"是一个融合了前端与后端技术的实践,它展示了如何利用JavaScript和JSP协同工作,为用户提供交互性强、数据驱动的菜单界面。理解并掌握这一技术,对于Web开发者来说是非常有价值的。

    JavaScript+Ajax实现树形目录

    JavaScript+Ajax实现树形目录是一种常见的前端技术应用,主要用于构建交互式、动态更新的网页内容。在本场景中,我们主要关注三个核心概念:树形目录、JavaScript和Ajax。 **树形目录** 是一种模拟真实文件系统或者...

    JS+css+Json的树形结构

    总之,JS+css+Json的树形结构是前端开发中的一种常见实践,通过它们的组合,开发者可以构建出用户友好的、具有动态交互功能的数据展示界面。理解并熟练掌握这些技术对于提升前端开发能力至关重要。

    JQuery 实现XML树形菜单

    **jQuery 实现XML树形菜单**\n\n在网页开发中,树形菜单是一种常见的交互元素,用于组织和展示层次化的信息。jQuery 是一个广泛使用的JavaScript库,它提供了丰富的API来简化DOM操作,使得实现这样的功能变得更加...

    XML+XSL树形菜单

    这是一个用XML+XSL生成一个灵活的树形菜单。其中用li和ul嵌套进行菜单的展示,用js控制子菜单的隐藏和显示,css来控制样式,xml文件用来存放菜单的内容。如果要生成多级菜单可以修改xml文件,将item节点下的name改为所...

Global site tag (gtag.js) - Google Analytics