下载地址:http://www.knowsky.com/download/treemenu.rar
关键代码:
<%
set conn=server.createobject("ADODB.CONNECTION")
connstr="DBQ="+server.mappath("db1.mdb")+"DefaultDir=DRIVER={Microsoft Access Driver (*.mdb)}"
conn.open connstr
function menu(id)
set rs=server.CreateObject("adodb.recordset")
sql="select * from menu where id1="&id&" order by url,id"
rs.open sql,conn,1,1
if rs.recordcount=0 then
rs.close
set rs=nothing
exit function
end if
response.write("<table border='0' cellspacing='0' cellpadding='0'>")
i=1
while not rs.eof
if len(rs("url"))>0 then
if i=rs.recordcount then
menutype="file1"
else
menutype="file"
end if
menuname="<a href="http://www.lukin.cn/web/asp/2006-2-22/&rs(url)&" target='_blank'>"&rs("menuname")&"</a>"
onmouseup=""
else
if i=rs.recordcount then
menutype="menu3"
listtype="list1"
onmouseup="with(eval('id"&rs("id")&"'))if(style.display==''){style.display='none'this.className='menu3'}else{style.display=''this.className='menu4'}"
else
menutype="menu1"
listtype="list"
onmouseup="with(eval('id"&rs("id")&"'))if(style.display==''){style.display='none'this.className='menu1'}else{style.display=''this.className='menu2'}"
end if
menuname=rs("menuname")
end if
%>
<tr>
<td class="<%= menutype%>" onMouseUp="<%= onmouseup%>"><%= menuname%></td>
</tr>
<%if len(rs("url"))<3 then%>
<tr id="id<%= rs("id")%>" style="display:none">
<td class="<%= listtype%>"><%menu(rs("id"))%></td>
</tr>
<%
end if
rs.movenext
i=i+1
wend
response.write("</table>")
rs.close
set rs=nothing
end function
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/htmlcharset=gb2312">
<title>=========无限级目录树=========http://www.knowsky.com</title>
<style type="text/css">
<!--
.menu1 {
background-image: url(folder1.gif)
background-repeat: no-repeat
height: 17px
left: 32px
padding-left: 32px
cursor: hand
}
.menu2 {
background-image: url(folder2.gif)
background-repeat: no-repeat
height: 17px
left: 32px
padding-left: 32px
cursor: hand
}
.menu3 {
background-image: url(folder3.gif)
background-repeat: no-repeat
height: 17px
left: 32px
padding-left: 32px
cursor: hand
}
.menu4 {
background-image: url(folder4.gif)
background-repeat: no-repeat
height: 17px
left: 32px
padding-left: 32px
cursor: hand
}
.list {
padding-left: 20px
background-image: url(list.gif)
background-repeat: repeat-y
}
.list1 {
padding-left: 20px
}
.file {
background-image: url(file.gif)
background-repeat: no-repeat
height: 16px
cursor: hand
padding-left: 32px
}
.file1 {
background-image: url(file1.gif)
background-repeat: no-repeat
height: 16px
cursor: hand
padding-left: 32px
}
body {
font-size: 9pt
color: #000000
background-color: #FFFFFF
}
a:link {
font-size: 9pt
color: #000000
text-decoration: none
}
a:visited {
font-size: 9pt
color: #000000
text-decoration: none
}
a:hover {
font-size: 9pt
color: #0000FF
text-decoration: none
position: relative
right: 1px
bottom: 1px
}
a:active {
font-size: 9pt
color: #000000
text-decoration: none
}
-->
</style>
</head>
<body>
<a href="http://www.knowsky.com/" target="_blank">http://www.knowsky.com/</a>提供最新下载《<a href="http://www.lukin.cn/web/asp/2006-2-22/menu.asp>管理</a>》<br><%
menu 0
conn.close
set conn=nothing
%>
</body>
</html>
无限级目录树最优算法的新研究:1。目录树的数据结构 2。探讨具体应用中数据库的查询复杂度。 表结构: id(编号)pid(父节点)nodepath(路径)nodetype(状态) 示例数据:1 0 0>F 2 0 0>D 3 2 0>2>D 4 3 0>2>3>F 测试项目: 1。获取当前节点的父节点:复杂度:O(n) 2。获取当前节点的下级子节点: 复杂度:O(n) 3。获取当前节点的所有子孙节点: 复杂度:O(n) 4。获取当前节点的所有直系祖宗节点: 复杂度:O(n) 5。删除、新增节点时比较容易实现,主要是实现节点转移有点麻烦:设被转移 的节点为S,转移到的目的节点为T,则S.nodepath=T.nodepath+T.id+'>'同时检 查S是否有兄弟节点,无则S的父节点的nodetype改为F检查T的nodetype,如为F 则改为D;修改表中S的子孙节点nodepath。一般这种情况出现的几率很低。 说明:本人的初衷是将该结构主要应用在类资源管理器的目录树中,根据 nodetype,画树的时候不必再搜索数据库去判断该节点是否还有子节点。至于用 在bbs帖子树,像帖子树中有一个帖子最新的,就必须将整个帖子树置顶这样的 情况,有种实用解决办法:增加一个字段rootid(帖子的根帖):select distanct rootid from table order by postdate。 本数据结构支持无限级树,关于树的深度,可以根据实际情况而定nodepath的长 度。最后,我为什么用“最优”,主要有激将之意,抛砖引玉,只是希望能引起 广大高手的注意,能提出个人独特建议,在交流上作广泛的讨论。欢迎分享,转载请注明来源:内存溢出
评论列表(0条)