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'/>分类管理 </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 + " "
+"<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/> "
+"<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+" "
+"<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 ...
3. **编写JavaScript代码**:使用Ajax技术监听用户的交互事件,向服务器发送请求,接收响应数据,并在客户端动态渲染树形菜单。 4. **CSS样式设计**:为了美观,需要设计合适的CSS样式,使树形菜单看起来更直观、...
本教程将详细介绍如何利用JavaScript、XML和XSL技术来构建这样的树形目录。 首先,我们需要理解这三种技术的基础概念: 1. **JavaScript**:这是一种运行在客户端的脚本语言,主要用于网页的交互性和动态效果,可以...
在IT行业中,动态树形菜单是一种常见的用户界面元素,它能以层次结构展示数据,使得用户可以方便地浏览和操作复杂的数据结构。本项目利用Ajax、JSP和Oracle数据库技术来实现这一功能,旨在提高用户体验并优化后台...
总结:通过 JavaScript 和 XML 结合,可以构建出动态的树形菜单,尤其是在早期的 Web 开发中。然而,考虑到现代浏览器的兼容性和性能优化,建议使用更现代的技术栈,如 jQuery、Vanilla JS、React 或 Vue 等,它们...
全部代码来源于我近期的一个项目,客户要求论坛必须有侧边导航栏,我于是想到用框架来实现。"mainFrame"是主显框架的ID及name属性。读者可灵活修改。(作者注[2011年6月14日]:这是我三年前写的代码,代码质量比较差...
在本项目中,jQuery用于在用户界面动态创建和更新XML树形结构。例如,可以使用`.html()`方法来填充或改变HTML元素的内容,`.append()`方法添加新的节点,以及`.click()`等事件监听器来响应用户的交互。 其次,**...
总的来说,"js+xml实现的复选框树"是一个将JavaScript的动态特性与XML的数据描述能力相结合的实践案例,为前端开发者提供了构建交互式树形选择功能的一种方式。理解和掌握这种技术对于提升Web应用的用户体验有着积极...
总结来说,通过使用JavaScript操作XML文档,我们可以动态地构建树形菜单。这个过程包括创建XML DOM对象,遍历XML结构,以及使用DOM API动态生成HTML元素来表示菜单结构。这个方法适用于需要根据动态数据生成导航菜单...
前端部分,`JavaScript`库如`JSTree`(压缩包中的`JSTREE`可能就是这个库的文件)提供了丰富的API和插件,使得在浏览器中生成和操作树形菜单变得简单。`JSTree`支持JSON和XML等多种数据源,与后端的Java接口完美对接...
这篇文章主要讲解如何使用Ajax、Div、JavaScript、XML以及Servlet技术来创建一个可以动态加载、展示无限层级目录结构的交互式树形组件。这个组件在网页应用中广泛用于文件管理、组织结构显示、导航菜单等场景。 **...
在处理XML文件时,为了更好地理解和操作XML文档,通常会将其以树形结构显示,这种方式能直观地展示XML文档的层级关系。 在IT领域,"xml文件树形显示"涉及到的技术主要包括XML解析器和数据可视化。XML解析器负责读取...
总之,"js+jsp树形菜单"是一个融合了前端与后端技术的实践,它展示了如何利用JavaScript和JSP协同工作,为用户提供交互性强、数据驱动的菜单界面。理解并掌握这一技术,对于Web开发者来说是非常有价值的。
JavaScript+Ajax实现树形目录是一种常见的前端技术应用,主要用于构建交互式、动态更新的网页内容。在本场景中,我们主要关注三个核心概念:树形目录、JavaScript和Ajax。 **树形目录** 是一种模拟真实文件系统或者...
总之,JS+css+Json的树形结构是前端开发中的一种常见实践,通过它们的组合,开发者可以构建出用户友好的、具有动态交互功能的数据展示界面。理解并熟练掌握这些技术对于提升前端开发能力至关重要。
**jQuery 实现XML树形菜单**\n\n在网页开发中,树形菜单是一种常见的交互元素,用于组织和展示层次化的信息。jQuery 是一个广泛使用的JavaScript库,它提供了丰富的API来简化DOM操作,使得实现这样的功能变得更加...
这是一个用XML+XSL生成一个灵活的树形菜单。其中用li和ul嵌套进行菜单的展示,用js控制子菜单的隐藏和显示,css来控制样式,xml文件用来存放菜单的内容。如果要生成多级菜单可以修改xml文件,将item节点下的name改为所...
本文将详细探讨"js+html+xml树型结构"在Web开发中的应用,以及如何利用这些技术创建出高效且直观的树形展示。 首先,HTML(HyperText Markup Language)是网页的基础,用于定义网页的结构。在构建树型结构时,HTML...