欢迎来到福编程网,本站提供各种互联网专业知识!

JXTree对象,读取外部xml文件数据,生成树的函数

发布时间:2007-04-02 作者: 来源:转载
/*******************************************JXTree对象,读取外部xml文件数据,生成树*@authorbrull*@emailbrull@163.com*@date2007-03-27*******************************************//**@paramxmlURLXML文件的地址*/varJXTree=function(xmlURL){varresu
/******************************************
*JXTree对象,读取外部xml文件数据,生成树
*@authorbrull
*@emailbrull@163.com
*@date2007-03-27
*******************************************/

/*
*@paramxmlURLXML文件的地址
*/
varJXTree=function(xmlURL)
{
varresult=newArray();

/*****************************
*首先定义TreeNode抽象对象
*TreeNode对象属性:
*id唯一编号,必须在xml文件里定义为节点属性
*level节点层次,从-1开始(即根节点)
*_click节点click,在xml文件定义为节点属性[可选]
*isLast是否为本节点所在层次最后一个节点
*parent_isLast父节点是否为父节点所在层次的最后一个节点
*toHTML本节点转成HTML代码的方法
*******************************/
varTreeNode=function(node,level)
{
varparent_elements=node.parentNode?(node.parentNode.parentNode?node.parentNode.parentNode.childNodes:null):null;
varelements=node.parentNode?node.parentNode.childNodes:null;
this.id=XMLDom.getAttribute(node,"id")?XMLDom.getAttribute(node,"id"):"";
this.level=level;//节点的层次
this.isLast=elements?((elements.item(elements.length-2)===node)?true:false):false;
this._click=XMLDom.getAttribute(node,'click')?XMLDom.getAttribute(node,'click'):"";
this.toHTML=null;//function
}

/*****************************
*ElementNode对象,继承自抽象对象TreeNode
*新增属性:
*_nodeName节点名称
******************************/
varElementNode=function(node,level)
{
TreeNode.apply(this,arguments);
this._nodeName=XMLDom.getAttribute(node,"name")?XMLDom.getAttribute(node,"name"):"";
this.toHTML=function(){
varresult="";
if(this.isLast)result+="

elseresult+="
result+="id='"+this.id+"_join'onclick="JXTree.changeState('"+this.id+"')">
"+this._nodeName+"
";
returnresult;
}
}

/*****************************
*TexNode对象,继承自抽象对象TreeNode
*属性和TreeNode一样
*新增属性:
*_nodeValue节点值
******************************/
varTextNode=function(node,level)
{
TreeNode.apply(this,arguments);
this._nodeValue=node.firstChild.nodeValue;
this.toHTML=function(){
varresult="";
if(this.isLast)result+="

";
elseresult+="
";
result+="
"+this._nodeValue+"
";
returnresult;
}
}

/**********Node节点构建结束,开始解释XML文件************/

varDOMRoot=XMLDom.loadXML(xmlURL).documentElement;//同步加载XML文件
varlevel=-1;//root节点level
varstack=newArray(1);
result.push("

"+XMLDom.getAttribute(DOMRoot,"name")+"
");
//解释xml文件内容成树状态展开的HTML代码,递归调用
this.parseXML=function(node){
stack.push(level);
level++;
varelement=newElementNode(node,level);
varelements=node.childNodes;
if(level!=0){
if(element.isLast)
result.push("");
else
result.push("");
}
for(vari=0;iif(elements.item(i).nodeName=="item"){//节点为树叶
vartextNode=newTextNode(elements.item(i),level);
result.push(textNode.toHTML());
textNode=null;//及时释放对象
}
elseif(elements.item(i).nodeType==1){//节点为树枝
varelementNode=newElementNode(elements.item(i),level);
result.push(elementNode.toHTML());
elementNode=null;//及时释放对象
this.parseXML(elements.item(i));
}
}
if(level!=0)result.push("
");
level=stack.pop();
}

//得到解释结果并返回
this.getTree=function(){
this.parseXML(DOMRoot);
DOMRoot=null;//释放DOM对象
returnresult.join("");
}
/*************静态属性***************/
JXTree.curText=null;//当前文本的id

/************静态方法***************/
JXTree.changeState=function(id){//展开或者收缩节点内容
var_body=document.getElementById(id+"_body");
var_join=document.getElementById(id+"_join");
varfolder=document.getElementById(id+"_folder");
(_body.style.display=="none")?(
_body.style.display="block",
_join.className=_join.className.replace("plus","minus"),
folder.className="folder_open"
):(
_body.style.display="none",
_join.className=_join.className.replace("minus","plus"),
folder.className="folder_close"
)
};//changeState
JXTree.setFocus=function(id){
if(JXTree.curText)
with(document.getElementById(JXTree.curText).style){
backgroundColor="";
color="#000";
}
with(document.getElementById(id).style){
backgroundColor="#003366";
color="#FFF";
}
JXTree.curText=id;
}
}

相关推荐