基于原生JavaScript的DOM树型菜单类实现与解析

作者:页面旅途时间:2026-10-30 17:10:30浏览:487

本文介绍了一个基于原生JavaScript编写的树型菜单类,旨在通过DOM操作实现菜单的展开与收起功能。代码定义了菜单图标、样式及缩进属性,并通过动态创建DOM节点构建菜单结构。核心逻辑包含添加子项、切换显示状态及图标替换,适合需要轻量级无依赖树形组件的场景。

树型菜单类概述与初始化

网络上关于树形菜单的JavaScript实现案例众多,笔者自行编写了一套树菜单类库,自认为效果尚可。现将其公开以供大家共享交流,期待与各位开发者共同进步。


/* KuoMart.com__MyKuoMart , Create By ybcola(at)163.com , 2006-7-2


Last Modified 2006-7-2 , ybcola@163.com */


<!--

Dtree类属性定义与DOM结构构建

function Dtree(){


this.MenuGroupClose="images/treeview_close.gif"; //菜单关闭图标


this.MenuGroupOpen="images/treeview_open.gif"; //菜单打开图标


this.MenuItemClass=""; //菜单项样式


this.MenuItemInfoClass=""; //菜单链接样式


this.MenuItemlPad="12px";//下级菜单缩进仁值


this.DefaultGroupState=false; //菜单组装入时默认状态


document.write("<div id=\"treeroot\"></div>");


this.Node=document.getElementById("treeroot");


//0结点DOM对像,数组1为连接显示,2为连接href,3为连接target,4为连接显示前图标


菜单项添加逻辑与节点渲染

this.AddItem=function(menuinfo){


var div=creatediv();


var div1=creatediv();


var ico=[this.MenuGroupClose,this.MenuGroupOpen];


div.className=this.MenuItemClass;


div1.style.marginLeft=this.MenuItemlPad;


div1.style.display=this.DefaultGroupState?"":"none";


var Node=menuinfo[0]?menuinfo[0][1]:this.Node;


var iteminfo="";


if(menuinfo[4]) iteminfo="<img src=\""+menuinfo[4]+"\" align=\"absmiddle\">";


if(menuinfo[2]) iteminfo+=" <a href=\""+menuinfo[2]+"\" target=\""+menuinfo[3]+"\" class=\""+this.MenuItemInfoClass+"\">";


iteminfo+=menuinfo[1];


if(menuinfo[2])iteminfo+="</a>";


div.innerHTML=iteminfo;


Node.appendChild(div);


Node.appendChild(div1);


子菜单展开交互与状态切换

if(menuinfo[0]){


if(!menuinfo[0][0].havechild) {


var as=document.createElement("img");


as.src=ico[1];


as.align="absmiddle";


as.onclick=function(){


swapshow(Node,as,ico);


}

menuinfo[0][0].insertBefore(as,menuinfo[0][0].firstChild);


as.insertAdjacentText("afterEnd"," ");


menuinfo[0][0].havechild=true;


}
}

return [div,div1];


}

辅助函数与折叠显示控制

function creatediv(){


var div=document.createElement("div");


return div;


}

function swapshow(obj,ico,oo){


if(obj.style.display!=""){


obj.style.display="";


ico.src=oo[0];


} 

else{


obj.style.display="none";


ico.src=oo[1];


}
}
}
-->  
作者最新文章