一段递归生成类似Windows资源管理器一样效果的树状菜单的代码

<HTML>   
<HEAD> 
<META content="text/html; charset=gb2312" http-equiv=Content-Type> 
<SCRIPT lanuage="Jscript"> 
function turnit(ss,ii,aa) 

 

if (ss.style.display=="none") 
{ss.style.display=""; 
aa.style.display=""; 
ii.src="minus.gif"; 

else 
{ss.style.display="none"; 
aa.style.display="none"; 
ii.src="plus.gif";} 

function onlyclose(ss,ii,aa) 

ss.style.display="none"; 
aa.style.display="none"; 
ii.src="plus.gif"; 

</SCRIPT> 
</HEAD> 
<BODY bgColor=#99CCFF> 
<% 
dim dbConn 
dim IDIndex 

IDIndex = 0 

'建立数据库连接 
Set dbConn = Server.CreateObject("Adodb.Connection") 
dbConn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath ("test.mdb") 

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
''生成文件类型树的递归函数,传入参数:NowItem为树节点的ID '' 
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
Sub DoItem(NowItem) 
dim rsTest 
dim YoungerBrother '下一个兄弟节点的ID 
dim OlderSon '第一个字节点的ID 

'建立记录集 
set rsTest = Server.CreateObject("Adodb.recordset") 

'生成sql语句,操作Doc_TypeTree表 
strSql = "select * from tab_test where ID = '" & NowItem & "'" 

'生成记录集 
rsTest.open strSql,dbConn,1,3 

if rsTest.eof then 
rsTest.close 
set recDosType = nothing 
exit sub 
end if 

YoungerBrother = trim(rsTest("BrotherNode") & "") 
OlderSon = trim(rsTest("SonNode") & "") 
NodeID = trim(rsTest("ID") & "") 
NodeName = trim(rsTest("NodeName") & "") 

'显示子节点 
if OlderSon = "" or OlderSon = "00" then '当此项无子项时,输出相应的代码 
response.write "<TR>" & chr(10) 
response.write "<TD> </TD>" & chr(10) 
response.write "<TD>" 
response.write "<A href='test'>" & NodeName & "</A>" 
response.write "</TD>" & chr(10) 
response.write "</TR>" & chr(10) 
else 
'*1.显示本项内容 
response.write "<TR>" & chr(10) 
response.write "<TD language=Jscript onmouseup=turnit(" & _ 
"Content" & IDIndex & "," & _ 
"img" & IDIndex & "," & _ 
"Aux" & IDIndex & ");>" & chr(10) 
response.write "<IMG height=9 id=img" & IDIndex & " src='plus.gif' width=9>" & chr(10) 
response.write "</TD>" & chr(10) 
response.write "<TD>" & chr(10) 
response.write "<A href='Frame_4_publish.asp?DocTypeID=" & _ 
NodeID & "' target='frmFour'>" & NodeName & _ 
"</A>" & chr(10) 
response.write "</TD>" & chr(10) 
response.write "</TR>" & chr(10) 

'*2.输出子孙树头代码 
response.write "<TR>" & chr(10) 
response.write "<TD id=Aux" & IDIndex & " style='display: none'> </TD>" & chr(10) 
response.write "<TD id=Content" & IDIndex & " style='display: none'>" & chr(10) 
response.write "<TABLE border='0'>" 
IDIndex = IDIndex + 1 

'*3.输出子孙树代码 
call DoItem(OlderSon) 

'*4.输出子孙树尾代码 
response.write "</TABLE>" 
response.write "</TD>" & chr(10) 
response.write "</TR>" & chr(10) 
end if 

if YoungerBrother <> "" and YoungerBrother <> "00" then 
call DoItem(YoungerBrother) 
end if 

rsTest.close 
set rsTest = nothing 
end Sub 

response.write "<table border='0'>" 
call DoItem("01") 
response.write "</table>" 

dbConn.close 
set dbConn = nothing 
%> 
</BODY> 
</HTML>

附录:数据结构及测试数据
数据库说明

ID:节点ID
NodeName:节点名称 
BrotherNode:兄弟节点,当前节点的下一个兄弟节点的ID
SonNode:子节点,当前节点的第一个子节点的ID

测试数据
ID NodeName ParentNode SonNode BrotherNode
01 管理文挡 00 0101 02
02 开发文挡 00 0201 03
03 产品文挡 00 00 00
0101 制度规定 01 00 0102
0102 计划 01 00 0103
0103 总结 01 00 00 
0201 参考文挡 02 00 0202 
0202 开发进度 02 00 0203 
0203 需求分析 02 00 0204 
0204 总体设计 02 00 0205 
0205 概要设计 02 00 0206 
0206 详细设计 02 020601 0207 
0207 编码文挡 02 00 0208 
0208 测试文挡 02 00 00 
020601 数据库详细设计 00 020602 0206 
020602 GIS详细设计 00 020603 0206 
020603 接口详细设计 00 020604 0206 
020604 界面详细设计 00 00 0206

版权声明:
作者:Kiyo
链接:https://www.wkiyo.cn/html/2008-01/i148.html
来源:Kiyo's space
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>