}
</style>
<script type="text/javascript">
function xmlTree(pPath,mPath){
this.plusImgPath=pPath;
this.minusImgPath=mPath;
}
xmlTree.prototype.loadXMLDoc=function(xml_file){
var xmlDoc;
try{//IE
//创建空的微软 XML 文档对象
xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
}catch(e){
try{//FF
//创建空的 XML 文档对象
xmlDoc=document.implementation.createDocument("","",null);
}catch(e){
alert(e.message);
}
}
try{
//关闭异步加载,这样可确保在文档完整加载之前,解析器不会继续执行脚本
xmlDoc.async=false;
//加载XML文档
xmlDoc.load(xml_file);
}catch(e){
alert(e.message);
return false;
}
return xmlDoc;
}
var str="";
xmlTree.prototype.treeShow=function(xml_file){
var xmlDoc=this.loadXMLDoc(xml_file);
var root=xmlDoc.documentElement;
str="<ul>";
this.getTreeNodes(root);
str+="</ul>";
document.getElementById("menu").innerHTML=str;
}
xmlTree.prototype.getTreeNodes=function(root){
if(root!=null){
for(var i=0;i<root.childNodes.length;i++){
var node=root.childNodes[i];
/*Firefox,以及其他一些浏览器,会把空的空白或换行作为文本节点来处理,而 Internet Explorer 不会这样.所以为了兼容大部分浏览器,需要检查节点类型.元素节点的类型是1*/
if(node.nodeType==1){
var name=node.getAttribute("name");
/*var name=node.getAttribute("name")和var name=node.attributes.getNamedItem("name").nodeValue等效.*/
if(document.all){
if(node.hasChildNodes){
var id=node.getAttribute("id");
str+="<li id='parent"+id+"' class=\"cls_parent\"><span class='cls_icon'><a href='#' onclick=\"showChildNodes('child"+id+"','img"+id+"','parent"+id+"')\"><img id='img"+id+"' src='"+this.minusImgPath+"' width='18' height='18' /></a></span><span class='cls_check'><input type='checkbox' onclick=\"selectAllChildNodes(this,'child"+id+"')\" /></span><a href='#' class='cls_a'>"+name+"</a><ul id='child"+id+"'>";
this.getTreeNodes(node);
str+="</ul></li>";
//document.write(str);
}else{
str+="<li class=\"cls_child\"><span class='cls_check'><input type='checkbox' /></span><a href='#' class='cls_a'>"+name+"</a></li>";
}
}else{
if(node.hasChildNodes&&node.childNodes.length>1){
var id=node.getAttribute("id");
document.write("id2="+id);
str+="<li id='parent"+id+"' class=\"cls_parent\"><span class='cls_icon'><a href='#' onclick=\"showChildNodes('child"+id+"','img"+id+"','parent"+id+"')\"><img id='img"+id+"' src='"+this.minusImgPath+"' width='18' height='18' /></a></span><span class='cls_check'><input type='checkbox' onclick=\"selectAllChildNodes(this,'child"+id+"')\" /></span><a href='#' class='cls_a'>"+name+"</a><ul id='child"+id+"'>";
document.write(str);
this.getTreeNodes(node);
str+="</ul></li>";
}else{
str+="<li class=\"cls_child\"><span class='cls_check'><input type='checkbox' /></span><a href='#' class='cls_a'>"+name+"</a></li>";
}
}
}
}
}
}
function showChildNodes(obj,img,li_parent){
var oLi=document.getElementById(li_parent);
var aUls=oLi.getElementsByTagName("ul");
var aImgs=oLi.getElementsByTagName("img");
var oDiv=document.getElementById(obj);
var oImg=document.getElementById(img);
if(document.all){//-----------------取得IE下当前样式----------------------
if(oDiv.style["display"]){
var vDisplay=oDiv.style["display"];
}else if(oDiv.currentStyle["display"]){
var vDisplay=oDiv.currentStyle["display"];
}
}else{//-----------------取得FF下当前样式----------------------
var vDisplay=document.defaultView.getComputedStyle(oDiv,null).display;
}
if(vDisplay=="block"){
if(aUls.length>0){
for(var i=0;i<aUls.length;i++){
aUls[i].style.display="none";
aImgs[i].src=plusImg;
}
}
oDiv.style.display="none";
oImg.src=plusImg;
}else{
oDiv.style.display="block";
oImg.src=minusImg;
}
}
function selectAllChildNodes(thisObj,obj){
var obj=document.getElementById(obj);
var aChildNodes=obj.getElementsByTagName("input");
if(thisObj.checked){
for(var i=0;i<aChildNodes.length;i++){
aChildNodes[i].checked=true;
}
}else{
for(var i=0;i<aChildNodes.length;i++){
aChildNodes[i].checked=false;
}
}
}
</script>
</head>
<body>
<div style="margin:40px auto; width:500px; padding:12px;" id="menu">
</div>
<script type="text/javascript">
var plusImg="add.jpg";
var minusImg="add1.jpg";
var myMenu=new xmlTree(plusImg,minusImg);
myMenu.treeShow("note.xml");
showChildNodes("child1000","img1000","parent1000");