<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无限级关联菜单[完全js版](树型)</title>
<script language="JavaScript" type="text/javascript">
/*
功能: 无限级关联菜单[完全js版](树型)
作者: 多菜鸟
时间: 2007-04-07
blog: http://blog.youkuaiyun.com/kingerq/
数组形如:
menuArr[ID] = [名称, 父ID];
*/
var menuArr = new Array();
menuArr[1] = ["中国", 0];
menuArr[2] = ["美国", 0];
menuArr[3] = ["日本", 0];
menuArr[4] = ["浙江", 1];
menuArr[5] = ["福建", 1];
menuArr[6] = ["东京", 3];
menuArr[7] = ["杭州", 4];
menuArr[8] = ["温州", 4];
menuArr[9] = ["鹿城", 8];
var classmenuArr = menuArr;
var classmenuLen = menuArr.length;
//分类列表
var url = "index.php?fun=listProduct&id=";
var prefix = new Array("http://community.youkuaiyun.com/ui/scripts/System/_resource/MzTreeView/_plus1.gif",
"http://community.youkuaiyun.com/ui/scripts/System/_resource/MzTreeView/_minus1.gif",
"http://community.youkuaiyun.com/ui/scripts/System/_resource/MzTreeView/_line4.gif",
"http://community.youkuaiyun.com/ui/scripts/System/_resource/MzTreeView/_line1.gif");
//显示分类
function listTree(pid, step){
var str = "";
for( var i = 1; i < classmenuLen; i++ ) {
if( classmenuArr[i] == undefined ) continue;
if( classmenuArr[i][1] == pid ) {
str += "<div class='cutTitle'><table width=230 border=0 cellspacing=0 cellpadding=0><tr><td width="+(20*(step+1))+">";
for( var j=0; j<step; j++ ) {
str += "<img src='"+prefix[2]+"' border=0>";
}
str += readKid(i)
? "<img id='img"+i+"' src='"+prefix[0]+"' onclick='chkImg("+i+", "+(step+1)+");' border=0>"
: "<img src='"+prefix[3]+"' border=0>";
str += "</td>";
str += "<td width='"+(230-20*(step+1))+"' id=/"listtxt1/"><a href='"+(step==0?url.replace(/listProduct2/g, "listProduct"): url)+i+"'"+(returnGetValue("pid")==i? " class='MenuOn'" : "")+">"+classmenuArr[i][0]+"</a></td>";
str += "</tr>";
str += "<tr id='tr"+i+"' style='display:none;'><td colspan=2 id='l"+i+"'></td></tr>";
str += "</table></div>";
//alert(str);
//str += listTree(i, step+1);
}
}
return str;
}
//点击图片事件
function chkImg(pid, step){
var d = document.getElementById("l"+pid);
var dTr = document.getElementById("tr"+pid);
var dImg = document.getElementById("img"+pid);
if( dTr.style.display == "none" ) {
d.innerHTML=listTree(pid, step);
//document.getElementById("kkk").innerText = d.innerHTML;
dTr.style.display = "block";
dImg.src=prefix[1];
if( navigator.appName == "Netscape" )
dTr.style.display = "table-row";
}else{
dTr.style.display = "none";
dImg.src=prefix[0];
}
}
//测试是否有子项目
function readKid(pid){
for( var i = 1; i < classmenuLen; i++ ) {
if( classmenuArr[i] == undefined ) continue;
if( classmenuArr[i][1] == pid ) {
return true;
}
}
return false;
}
//展开菜单
//str 以","号分隔的目录ID字符串
function spreadKid(str){
var pat = /[/d,]+/;
if( ! pat.test( str ) ) return;
var arr = str.split(",");
for( var i=0; i < arr.length-1; i++ ) {
chkImg(arr[i], i+1);
}
}
//取得指定URL参数值
function returnGetValue(pVar,pURL){
pURL = pURL || window.location.href;
try{
pURL=decodeURIComponent(pURL)//即使是用decodeURI也是同样的结果
}catch(e){
//
}
var vars =pURL.split("?");
if(vars.length==1) return "";
var varsList=vars[1].split("&");
var equalString;
for(var i=0;equalString=varsList[i];i++){
var equalArray=equalString.split("=");
if(equalArray[0]==pVar)
return equalArray[1] || "";
}
return "";
}
//document.write( listTree(0,0 ) );
</script>
<style type="text/css">
<!--
.cutTitle {
width:150px;
height:auto;
font-size:12px;
/* 禁止自动换行 */
white-space: nowrap;
/* 隐藏超出部分 */
overflow:hidden;
/* 用省略号代替结尾, 只对 IE 有效 */
text-overflow:ellipsis;
}
-->
</style>
</head>
<body>
<script language="javascript">
document.write( listTree(0,0) );//显示列表
//spreadKid("1,4,8,9");//展开指定项
</script>
</body>
</html>
这是一个使用JavaScript实现的无限级关联菜单的代码示例,由多菜鸟于2007年4月7日编写。菜单数据以数组形式存储,通过函数listTree递归展示树型结构。代码中包含了展开/折叠菜单的功能,并支持指定ID的菜单展开。
1772

被折叠的 条评论
为什么被折叠?



