感谢csdn,数型菜单的制作原理和代码分享

超级大笨狼 2003-08-21 11:06:51
近来问菜单的人很多,我就自己做了一个,自己暂时不用,完全是给大家分享的,数据库结构采用常见

的功能菜单。
本文完全VBS制作,结交VBS高手,我用VBS能做出Javascript能做的一切
QQ:28963147,email:panyuguang962@sohu.com
先弄清楚原理:下面这段是最简单的动态菜单DHTML模型,大家拷贝到html页里面先实验看看。

<table border="1">

<tr>
<td id=aa style="cursor=hand" onclick="aaa()"> AAA </td>
</tr>
<tr>
<td id=a1 style="display:none" > aa1</td>
</tr>

<tr>
<td id=a2 style="display:none"> aa2</td>
</tr>
</table>
<SCRIPT LANGUAGE=vbs>
dim a
sub aaa()
a=a+1
if a mod 2 =0 then
a1.style.display ="none"
a2.style.display ="none"
else
a1.style.display ="block"
a2.style.display ="block"
end if
end sub

</SCRIPT>
大家看到关键了吗?:
a1.style.display ="block"
a1.style.display ="none"
其实就是隐藏和显示。
下面是结合数据库的动态菜单,经简单测试好用!
...全文
99 84 打赏 收藏 转发到动态 举报
写回复
用AI写文章
84 条回复
切换为时间正序
请发表友善的回复…
发表回复
yt7xw 2004-02-08
  • 打赏
  • 举报
回复
ewwe
hangzhoufeihu 2003-12-14
  • 打赏
  • 举报
回复
mark
超级大笨狼 2003-11-10
  • 打赏
  • 举报
回复
ceocio(MS MVP)(西南交大)的做法占多数,但存在很多问题。
主要缺点:无法表示兄弟姐妹的次序,运行时候要递归遍历,算法复杂,你经常见到一棵树需要半天才显示完。
大家知道在单纯程序中实现递归容易,但是里面涉及数据库游标指针就麻烦。
主要优点点:存储空间少,满足数据库设计的范式要求。
对比
1,增(增加兄弟姐妹)
ceocio的做法:
无法直接确定同父亲的兄弟姐妹次序,需递归遍历。
我的做法:可以,无须遍历。
2,删(删除父亲,删除孩子,删除爷爷,孙子)
ceocio的做法:
删除父亲,只要征求他的所有子女同意,但要叔叔舅舅同意。需递归遍历。
删除孩子,征求兄弟姐妹同意。
我的做法:无须遍历巨快。
3,查(查找某人的全部祖宗8代j家谱)
ceocio做法:遍历多次,巨慢。
我的做法:无须遍历巨快。
4,改(把某人变成别人家的孩子)
ceocio做法:遍历多次,巨慢。
我的做法:无须遍历巨快。
5,显(在网页上结合HTML父亲,大哥,二哥,小弟是需要不同图标的)
ceocio做法:不适合web程序解释执行的特点,递归生成,巨慢。
我的做法:适合,巨快。
6,算
ceocio做法:大量递归,开发进度慢,代码长。
我的做法:巨简单。
7,存
ceocio做法:也许还要增加一个字段来表示兄弟关系。
我的做法:足够。
超级大笨狼 2003-11-10
  • 打赏
  • 举报
回复
无限分级描述办法很多,ceocio(MS MVP)(西南交大)的办法是学校派的做法,真正在我们asp程序开发中很不实用,程序的操作分为“增删查改显算存”,考虑这7种操作,速度和存储是矛盾的,要提高速度往往牺牲存储空间,所以要考虑那种操作最频繁。因为网页程序最常用的就是显示,大量的普通用户只是看树,只有管理员来维护树,那么要把显示速度放在重要的。ceocio(MS MVP)(西南交大)的办法,在显示树的时候要遍历才能决定排序,每个节点的深度和位置都要用递归来决定。我推荐我的做法,在算法上简单,在存储上略微冗余,但是微乎其微。

仿照csdn左面的菜单的ASP+数据库无限级树菜单代码分享

近来问无限级数据库树菜单人很多,我就自己做了一个仿照csdn左面的菜单,自己暂时不用,完全是给大家分享的,要数据库和代码文件请到www.ymdg.com/tree.rar下载,如果有人提供空间存放那是最好了。
本文完全采用大家熟悉的ASP(VBS)制作,过写日子我再写一个基于XML技术的给大家。
QQ:28963147,email:panyuguang962@sohu.com
感谢CSDN和全体网友!
说明:
Access数据库
● 数据库名:tree
● 表名:tree
● 字段名的设计
ID 文本类型 编码
Name 文本类型 节点文字
HyperLink 文本类型 相关信息
---------------------------------------------------
ID | Name | HyperLink
---------------------------------------------------
1_1_1 | ASP | http://www.csdn.net
---------------------------------------------------
1_1_1_1 | DHTML | http://www.csdn.net
---------------------------------------------------
1_2_2 | JAVA | http://www.csdn.net
---------------------------------------------------
1_1_2 | JavaScript | http://www.csdn.net
---------------------------------------------------
1_2_1 | VB | http://www.csdn.net
---------------------------------------------------
1_2_1_2 | VBA | http://www.csdn.net
---------------------------------------------------
1_1 | WEB开发 | http://www.csdn.net
---------------------------------------------------
1 | WWW.CSDN.net | http://www.csdn.net
---------------------------------------------------
1_2_1_1 | 基础类 | http://www.csdn.net
---------------------------------------------------
1_3_1 | 基础类 | http://www.csdn.net
---------------------------------------------------
1_2 | 开发语言 | http://www.csdn.net
---------------------------------------------------
1_1_1_2 | 内建对象 | http://www.csdn.net
---------------------------------------------------
1_3 | 数据库 | http://www.csdn.net
----------------------------------------------------
文件:nolimited.asp经简单测试好用!代码如下:
<html>
<head>
<META name=VI60_defaultClientScript content=VBScript>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>asp树的研究</title>
</head>
<style type="text/css">
<!--
.aa {
font-size: 14px;
color: #000000;
text-align: center;
vertical-align: middle;
letter-spacing: 0px;
word-spacing: 0px;
}
-->
</style>
<body bgcolor="DEE3F7">
<%
dim cn,rs,SQL ,Para,NumChild
set cn=server.CreateObject("ADODB.connection")
set rs=server.createobject("ADODB.recordset")
set rs1=server.createobject("ADODB.recordset")
cn.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("tree.mdb")
SQL="Select * from tree order by ID"
rs.open SQL,cn,3,2
do while not rs.EOF
SQL="Select ID from tree where ID like '" & rs("ID") & "%' and ID<>'" & rs("ID") & "' order by ID"
Para=rs("ID") & "|"
NumChild=0
rs1.open SQL,cn, 3,2
NumChild=rs1.RecordCount
do while not rs1.EOF
Para =Para & rs1("ID") & "|"
rs1.MoveNext
loop
Para=cstr(trim(left(Para,len(Para)-1)))
rs1.Close
%>
<table id="T<%=rs("ID")%>"
border=1
cellpadding=0
cellspacing=0
bordercolor="#DEE3F7"
class="aa"
abbr="<%=Para%>"
summary=<%=checkid(rs("ID"))%>
style="cursor:hand"
onClick="vbs:subtree '<%=Para%>'" >

<tr>
<td width="<%=17+checkid(rs("ID"))*20%>"
height="20" align="right">
<table width="20" height="20" border="1" cellpadding="0" cellspacing="0" bordercolor="#DEE3F7">
<tr>

<td align="center" valign="middle" bordercolor="#000000" id="R<%=rs("ID")%>" ><%if NumChild=0 then Response.Write "." else Response.Write "-"%></td>
</tr>
</table>
</td>

<td height="20"
nowrap
bordercolor="#FFFFFF"
onMouseOver="vbs:me.bgcolor='#CCCCCC':me.bordercolor='#999999'"
onMouseOut="vbs:me.bgcolor='#DEE3F7':me.bordercolor='#ffffff'"
title="<%=rs("HyperLink")%>">
<%=rs("Name")%></td>
</tr>
</table>


<%
rs.MoveNext
loop
rs.Close:set rs=nothing
cn.Close:set cn=nothing
function checkid(x)
dim Tempnum
Tempnum=0
for i=1 to len(x)
if mid(x,i,1)="_" then
Tempnum=Tempnum+1
end if
next
checkid=Tempnum
end function


%>
<script language=VBS>
sub subtree(Client_para)
if instr(Client_para,"|")=0 then exit sub
Myarray=split(Client_para,"|")
Mytext=eval("R" & Myarray(0) & ".innertext")
select case Mytext
case "+"
document.all.item("R" & Myarray(0)).innertext="-"
for i=1 to ubound(Myarray)
if eval("T" & Myarray(i) & ".summary")-eval("T" & Myarray(0) & ".summary")=1 then
document.all.item("T" & Myarray(i)).style.display="block"
end if
if eval("T" & Myarray(i) & ".summary")-eval("T" & Myarray(0) & ".summary")>1 then
document.all.item("T" & Myarray(i)).style.display="none"
end if
next
case "-"
document.all.item("R" & Myarray(0)).innertext="+"
for i=1 to ubound(Myarray)
if eval("T" & Myarray(i) & ".summary")-eval("T" & Myarray(0) & ".summary")>=1 then
document.all.item("T" & Myarray(i)).style.display="none"
if eval("R" & Myarray(i) & ".innertext")="-" then
document.all.item("R" & Myarray(i)).innertext="+"
end if
end if
next
end select
set Myarray=nothing
end sub

Sub document_onselectstart
document.selection.clear
End Sub

if isobject(eval("T1")) then
subtree document.all("T1").abbr
subtree document.all("T1").abbr
end if
</script>

</html>







TT008 2003-10-06
  • 打赏
  • 举报
回复
study
超级大笨狼 2003-09-18
  • 打赏
  • 举报
回复
5个绿裤穿了一夏天,终于升到红星少将了,高兴!散分,散我的树行菜单代码!
http://www.ymdg.com/tree.rar
大家去下载我的树,ASP+数据库,csdn样式。完全VBS脚本
http://www.ymdg.com/tree.htm树演示
http://www.ymdg.com/link.htm我做的dhtml游戏,右键看代码。
超级大笨狼 2003-09-09
  • 打赏
  • 举报
回复
哑哑呀,哇哇挖!!
超级大笨狼 2003-09-06
  • 打赏
  • 举报
回复
:-)
专家分4300多了,再混700就升将军了!
nowfox 2003-09-05
  • 打赏
  • 举报
回复
做个记号,好好学习
somecom 2003-09-05
  • 打赏
  • 举报
回复
study!
zhiye 2003-09-05
  • 打赏
  • 举报
回复
我现在也正在试图做一个树型菜单,是“用介绍一种效率极高的分类算法”(lizhihui)曾经发的一份帖子上所提到的那个分类编码算法来实现的。不过它好象并不是无限级的,因为它受到机器的限定,在我的机子上最多只能使用32位2进制数来表示编码,因此受到一定的限制,不过我觉得这个算法的思想还是很好的!如果作好的话,我会同大家分享的。
welcome403 2003-09-01
  • 打赏
  • 举报
回复
http://daydaymovie.vicp.net/main.asp

这个菜单也不错啊
wxlada 2003-09-01
  • 打赏
  • 举报
回复
两级的用处不大,期待楼主的无限级的出来。
tangss 2003-09-01
  • 打赏
  • 举报
回复
UP
angleb2001 2003-09-01
  • 打赏
  • 举报
回复
uop
liujun999999 2003-09-01
  • 打赏
  • 举报
回复
收藏
cmstudio 2003-09-01
  • 打赏
  • 举报
回复
我也收到了..谢谢你
  • 打赏
  • 举报
回复
thanks,学习!
liaijian 2003-09-01
  • 打赏
  • 举报
回复
ubound( MyArray)
是什么意思?
zanpo 2003-09-01
  • 打赏
  • 举报
回复
收藏!!!!!!!!

支持支持!!!!!!!!

老狼很久不见了呀!!!!!!!!!!1
加载更多回复(64)

28,390

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧