请高手指教一下,这个页面右侧的菜单是如何实现的? 应该是基于table做的收起的部分为tr的style.display属性为"none",只不过目录树结构有个算法,比较难搞。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 看<script>...</script>就知道了 给你个我做的吧。与大家共勉吧:注意<tr>中的属性设定,有leaf的为叶,还有个layer为层级,最好研磨以下函数,即目录树算法:---tree.htm------------------------------------------------------<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <title>功能树</title> <link type = "text/css" rel = "stylesheet" href = "common/tree.css"> </head> <body topmargin="0" leftmargin="0" bgcolor="#A0E4D3"> <div style="position:absolute;top:2px;left:100px;padding:4px"><font class="menueon"><a href="#" class="link" onclick="chanAllTree(tableboxmain,0)">展开</a> | <a href="#" class="link" onclick="chanAllTree(tableboxmain,1)">收起</a></font></div> <table id = "tableboxmain" cellSpacing = "0" cellpadding="1" width="100%" border="0"> <tr layer="0"> <td> <font class="menueon">测试树</font> </td> </tr> <tr layer="1"> <td> <a class="menueon" onclick="javascript:treeSwitch(this)">[+]</a><font class="menueon">目录A</font> </td> </tr> <tr layer="2"> <td> <a class="menueon" onclick="javascript:treeSwitch(this)">[+]</a><font class="menueon">目录A</font> </td> </tr> <tr layer="3" leaf> <td> <font class="menueon"><img src="exe.gif" style="vertical-align:top"><a href="javaScript:donewwin('eFinance/pPrePay.html','预付货款')" class="link">预付货款</a></font> </td> </tr> <tr layer="2"> <td> <a class="menueon" onclick="javascript:treeSwitch(this)">[+]</a><font class="menueon">目录A</font> </td> </tr> <tr layer="3" leaf> <td> <font class="menueon"><img src="exe.gif" style="vertical-align:top"><a href="javaScript:donewwin('eFinance/pPrePay.html','预付货款')" class="link">预付货款</a></font> </td> </tr> <tr layer="1" leaf> <td> <font class="menueon"><img src="exe.gif" style="vertical-align:top"><a href="javaScript:donewwin('eFinance/pSelAccountPay.html','应付货款付款')" class="link">应付货款付款</a></font> </td> </tr> </table> <script language="JavaScript" src="common/tree.js"></script> <script> chanAllTree(tableboxmain,1); </script> </body></html>--------------------------------------------------------------------------common/tree.js----------------------------------------------------- //列表窗口展开与收起相关函数 function treeSwitch(startObj){ var innerStr = new Array("[-]","[+]"); //[0],展开 [1],收起 var status = new Array("block","none"); var currTR = startObj.parentNode.parentNode; var currLayer = parseInt(currTR.layer); var trPos = currTR.nextSibling; if(trPos==null || parseInt(trPos.layer)<=currLayer) return false; if(startObj.innerHTML==innerStr[0]){ //执行收起 startObj.innerHTML = innerStr[1]; while(parseInt(trPos.layer)>currLayer){ trPos.style.display = status[1]; trPos = trPos.nextSibling; if(trPos==null) return false; } }else{ //执行展开 startObj.innerHTML = innerStr[0]; hideTR(currTR); while(parseInt(trPos.layer)>currLayer){ hideTR(trPos); trPos = trPos.nextSibling; if(trPos==null) return false; } } } function hideTR(trObj){ var status = new Array("block","none"); var innerStr = new Array("[-]","[+]"); var currLayer = parseInt(trObj.layer); var trObjDisplay = 0; var checking = true; var uperLayer = currLayer-1; if(uperLayer<=0) return false; var trPos = trObj.previousSibling; do{ if(parseInt(trPos.layer)==uperLayer){ if(trPos.cells(0).all.tags("a")(0).innerHTML==innerStr[1]){ trObjDisplay = 1; break; }else{ uperLayer--; } } trPos = trPos.previousSibling; }while(uperLayer>0); trObj.style.display = status[trObjDisplay]; } function chanAllTree(tableObj,flag){ //flag=0,全展开 flag=1,全收起 var status = new Array("block","none"); var innerStr = new Array("[-]","[+]"); //[0],展开 [1],收起 //最多5级层次 var buff_i = new Array(-1,-1,-1,-1,-1,-1); var count = new Array(0,0,0,0,0,0); for(var i=0 ; i<tableObj.rows.length ; i++){ var b = parseInt(tableObj.rows(i).layer); if(b>0) count[b-1]++; if(buff_i[b]!=-1){ if(tableObj.rows(buff_i[b]).leaf==undefined) tableObj.rows(buff_i[b]).count = count[b]; tableObj.rows(buff_i[b]).style.display = status[flag]; } buff_i[b] = i; count[b] = 0; for(var j=b+1 ; buff_i[j]!=-1 ; j++){ if(tableObj.rows(buff_i[j]).leaf==undefined) tableObj.rows(buff_i[j]).count = count[j]; tableObj.rows(buff_i[j]).style.display = status[flag]; buff_i[j] = -1; count[j] = 0; } } for(var k=0 ; buff_i[k]!=-1 ; k++){ if(tableObj.rows(buff_i[k]).leaf==undefined) tableObj.rows(buff_i[k]).count = count[k]; tableObj.rows(buff_i[k]).style.display = status[flag]; } for(var h=0 ; h<tableObj.rows.length ; h++){ if(tableObj.rows(h).layer=="0" || tableObj.rows(h).layer=="1") tableObj.rows(h).style.display = "block"; if(tableObj.rows(h).layer!="0" && tableObj.rows(h).leaf==undefined){ if(tableObj.rows(h).count>0) tableObj.rows(h).cells(0).all.tags("a")(0).innerHTML = innerStr[flag]; if(tableObj.rows(h).count==0){ tableObj.rows(h).cells(0).all.tags("a")(0).className = "menueoff"; tableObj.rows(h).cells(0).all.tags("font")(0).className = "menueoff"; } } } } //打开窗口 function donewwin(val1, val2){ var sheight = screen.height-80; var swidth = screen.width-15; window.open(val1,val2,"status=yes,resizable=yes,scrollbars=yes,left=0,top=0,width="+swidth+",height="+sheight); }--------------------------------------------------------------------------------为了好看点再加上tree.css吧---------tree.css-------------------------------------------------------------- body{cursor:default;} a.link {text-decoration: none; color: #333333; font-size: 12px; border:#A0E4D3 3px dotted;} a.link:link {text-decoration: none; color: #333333; font-size: 12px ;border:#A0E4D3 3px dotted;} a.link:active {text-decoration: none; color: #333333; font-size: 12px ;border:#A0E4D3 3px dotted;} a.link:hover {text-decoration: none; color: #006600; font-size: 12px ;border:#808080 1px dotted;padding-top:2px;padding-left:2px;padding-right:2px;} .menueon {font-size:12px;color:#333333;cursor:default;border:#A0E4D3 1px dotted;} .menueoff {font-size:12px;color:#777777;cursor:default;border:#A0E4D3 1px dotted;}----------------------------------------------------------------------------另外还有叶子图标为exe.gif,与leaf.htm在同一目录下。 taxmma(好客007) ,真是好人!我已经把你的例子运行了一下,非常好!我感谢了!能不能再帮帮我,做一个框架结构,也就是在左边点击,然后在右边打开!只要一个页面就行,我照着学学.再次谢谢. jquery自定义插件, 奇怪的bug HTML 中嵌入MP3问题 如何判断iframe中的网页是否可以打开 怎样让INPUT不出现下拉框 (请教)JS中关联数组的字符串写法 有没有不用frame分框的树型菜单??? 关于javascript的new Date()用法 如果得到框架页面失去焦点的事件??? 那位大哥有键盘的代码(屏蔽特殊键用),或者给一个按下键盘就显示键盘代码的例子 为什么 deleteRow() 出错 ? 字符串问题 怎样调用js文件中的函数显示时间?
注意<tr>中的属性设定,有leaf的为叶,还有个layer为层级,最好研磨以下函数,即目录树算法:---tree.htm------------------------------------------------------
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>功能树</title>
<link type = "text/css" rel = "stylesheet" href = "common/tree.css">
</head>
<body topmargin="0" leftmargin="0" bgcolor="#A0E4D3">
<div style="position:absolute;top:2px;left:100px;padding:4px"><font class="menueon"><a href="#" class="link" onclick="chanAllTree(tableboxmain,0)">展开</a> | <a href="#" class="link" onclick="chanAllTree(tableboxmain,1)">收起</a></font></div> <table id = "tableboxmain" cellSpacing = "0" cellpadding="1" width="100%" border="0">
<tr layer="0">
<td>
<font class="menueon">测试树</font>
</td>
</tr>
<tr layer="1">
<td>
<a class="menueon" onclick="javascript:treeSwitch(this)">[+]</a><font class="menueon">目录A</font>
</td>
</tr>
<tr layer="2">
<td>
<a class="menueon" onclick="javascript:treeSwitch(this)">[+]</a><font class="menueon">目录A</font>
</td>
</tr>
<tr layer="3" leaf>
<td>
<font class="menueon"><img src="exe.gif" style="vertical-align:top"><a href="javaScript:donewwin('eFinance/pPrePay.html','预付货款')" class="link">预付货款</a></font>
</td>
</tr>
<tr layer="2">
<td>
<a class="menueon" onclick="javascript:treeSwitch(this)">[+]</a><font class="menueon">目录A</font>
</td>
</tr>
<tr layer="3" leaf>
<td>
<font class="menueon"><img src="exe.gif" style="vertical-align:top"><a href="javaScript:donewwin('eFinance/pPrePay.html','预付货款')" class="link">预付货款</a></font>
</td>
</tr>
<tr layer="1" leaf>
<td>
<font class="menueon"><img src="exe.gif" style="vertical-align:top"><a href="javaScript:donewwin('eFinance/pSelAccountPay.html','应付货款付款')" class="link">应付货款付款</a></font>
</td>
</tr>
</table> <script language="JavaScript" src="common/tree.js"></script> <script>
chanAllTree(tableboxmain,1);
</script> </body>
</html>
--------------------------------------------------------------------------common/tree.js-----------------------------------------------------
//列表窗口展开与收起相关函数
function treeSwitch(startObj){
var innerStr = new Array("[-]","[+]"); //[0],展开 [1],收起
var status = new Array("block","none");
var currTR = startObj.parentNode.parentNode;
var currLayer = parseInt(currTR.layer);
var trPos = currTR.nextSibling;
if(trPos==null || parseInt(trPos.layer)<=currLayer) return false; if(startObj.innerHTML==innerStr[0]){ //执行收起
startObj.innerHTML = innerStr[1];
while(parseInt(trPos.layer)>currLayer){
trPos.style.display = status[1];
trPos = trPos.nextSibling;
if(trPos==null) return false;
}
}else{ //执行展开
startObj.innerHTML = innerStr[0];
hideTR(currTR);
while(parseInt(trPos.layer)>currLayer){
hideTR(trPos);
trPos = trPos.nextSibling;
if(trPos==null) return false;
}
}
} function hideTR(trObj){
var status = new Array("block","none");
var innerStr = new Array("[-]","[+]");
var currLayer = parseInt(trObj.layer);
var trObjDisplay = 0; var checking = true;
var uperLayer = currLayer-1;
if(uperLayer<=0) return false;
var trPos = trObj.previousSibling;
do{
if(parseInt(trPos.layer)==uperLayer){
if(trPos.cells(0).all.tags("a")(0).innerHTML==innerStr[1]){
trObjDisplay = 1;
break;
}else{
uperLayer--;
}
}
trPos = trPos.previousSibling;
}while(uperLayer>0); trObj.style.display = status[trObjDisplay];
} function chanAllTree(tableObj,flag){ //flag=0,全展开 flag=1,全收起
var status = new Array("block","none");
var innerStr = new Array("[-]","[+]"); //[0],展开 [1],收起
//最多5级层次
var buff_i = new Array(-1,-1,-1,-1,-1,-1);
var count = new Array(0,0,0,0,0,0); for(var i=0 ; i<tableObj.rows.length ; i++){
var b = parseInt(tableObj.rows(i).layer); if(b>0) count[b-1]++;
if(buff_i[b]!=-1){
if(tableObj.rows(buff_i[b]).leaf==undefined) tableObj.rows(buff_i[b]).count = count[b];
tableObj.rows(buff_i[b]).style.display = status[flag];
}
buff_i[b] = i;
count[b] = 0; for(var j=b+1 ; buff_i[j]!=-1 ; j++){
if(tableObj.rows(buff_i[j]).leaf==undefined) tableObj.rows(buff_i[j]).count = count[j];
tableObj.rows(buff_i[j]).style.display = status[flag];
buff_i[j] = -1;
count[j] = 0;
}
}
for(var k=0 ; buff_i[k]!=-1 ; k++){
if(tableObj.rows(buff_i[k]).leaf==undefined) tableObj.rows(buff_i[k]).count = count[k];
tableObj.rows(buff_i[k]).style.display = status[flag];
} for(var h=0 ; h<tableObj.rows.length ; h++){
if(tableObj.rows(h).layer=="0" || tableObj.rows(h).layer=="1") tableObj.rows(h).style.display = "block";
if(tableObj.rows(h).layer!="0" && tableObj.rows(h).leaf==undefined){
if(tableObj.rows(h).count>0) tableObj.rows(h).cells(0).all.tags("a")(0).innerHTML = innerStr[flag];
if(tableObj.rows(h).count==0){
tableObj.rows(h).cells(0).all.tags("a")(0).className = "menueoff";
tableObj.rows(h).cells(0).all.tags("font")(0).className = "menueoff";
}
}
}
} //打开窗口
function donewwin(val1, val2){
var sheight = screen.height-80;
var swidth = screen.width-15;
window.open(val1,val2,"status=yes,resizable=yes,scrollbars=yes,left=0,top=0,width="+swidth+",height="+sheight);
}
--------------------------------------------------------------------------------为了好看点再加上tree.css吧
---------tree.css--------------------------------------------------------------
body{cursor:default;}
a.link {text-decoration: none; color: #333333; font-size: 12px; border:#A0E4D3 3px dotted;}
a.link:link {text-decoration: none; color: #333333; font-size: 12px ;border:#A0E4D3 3px dotted;}
a.link:active {text-decoration: none; color: #333333; font-size: 12px ;border:#A0E4D3 3px dotted;}
a.link:hover {text-decoration: none; color: #006600; font-size: 12px ;border:#808080 1px dotted;padding-top:2px;padding-left:2px;padding-right:2px;} .menueon {font-size:12px;color:#333333;cursor:default;border:#A0E4D3 1px dotted;}
.menueoff {font-size:12px;color:#777777;cursor:default;border:#A0E4D3 1px dotted;}----------------------------------------------------------------------------
另外还有叶子图标为exe.gif,与leaf.htm在同一目录下。
能不能再帮帮我,做一个框架结构,也就是在左边点击,然后在右边打开!只要一个页面就行,我照着学学.再次谢谢.