需要树型结构源代码

naomi77 2003-08-30 09:59:15
就两层结构,初始化时显示第一层,有子层的前面显示"+"。点击"+"展开下一层。下一层和上一层在数据库里面有联系。就这么简单,提供的代码如果能成为我编写的基础,我就给分。
...全文
76 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
超级大笨狼 2003-09-13
  • 打赏
  • 举报
回复
仿照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>




liuruhong 2003-09-01
  • 打赏
  • 举报
回复
这个是我基于Javascript实现的例子,有兴趣可以看看
http://expert.csdn.net/Expert/TopicView1.asp?id=2210140
wxlada 2003-09-01
  • 打赏
  • 举报
回复
这东西还是自己去做比较有意思。其实没什么太大的技巧,有一种方法是:数据库有一个Menuorder的字段,插入数据库菜单栏目的时候选择合适的插入点,写入Menuorder的值,并把其他需要修改Menuorder的菜单栏目值改写(其实这些都可以参考动网论坛的程序)

关于+ -的问题,我是通过session来实现的,
在循环里判断
if Session("呵呵" & rs("ID"))="hide" then
显示
end if

还有要注意点的地方就是在赋予session是hide 还是show的时候,如果上一级目录是hide的话,要用循环使所属的下一级也是hide。
===============================================================================
唉,这个方法是我自己琢磨出来的,我估计是有不少更好的方法,抛砖引玉……期待中

zanpo 2003-09-01
  • 打赏
  • 举报
回复
http://fason.nease.net/

强烈推荐!!!!!!!!!
tiandiren2008 2003-09-01
  • 打赏
  • 举报
回复
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>树型目录</title>
<title>tree menu example</title>
<style>
ul {margin-left:9pt;}
li {font-size:9pt;list-style-type:none;list-style-image:none;}
li.close {font-size:9pt;list-style-image:url(images/close.gif);}
li.open {font-size:9pt;list-style-image:url(images/open.gif);}
li.midnode {font-size:9pt;list-style-image:url(images/midnode.gif);}
li.lastnode {font-size:9pt;list-style-image:url(images/lastnode.gif);}
a {text-transform: none; text-decoration:none;color:#FFFF99}
a:visited {text-transform: none; text-decoration:none;color:#FFFF99}
a:hover {text-decoration:underline;color:#FFFFFF}
</style>
<script>
var arrMenu = new Array(
"菜单一", new Array(
"菜单一一", new Array(
"菜单一一一", "111.htm",
"菜单一一二", "112.htm",
"菜单一一三", "113.htm"
),
"菜单一二", new Array(
"菜单一二一", "121.htm",
"菜单一二二", "122.htm",
"菜单一二三", "123.htm"
)
),
"菜单二", new Array(
"菜单二一", new Array(
"菜单二一一", "211.htm",
"菜单二一二", "212.htm",
"菜单二一三", "213.htm"
),
"菜单二二", new Array(
"菜单二二一", "221.htm",
"菜单二二二", "222.htm",
"菜单二二三", "223.htm"
)
),
"菜单三", "223.htm"
);
var count=0;
function closeAll(id) {
var menus = document.all.tags("LI");
var i,j;
for (i=0;i<menus.length; i++) {
if (menus[i].id.charAt(0)=='M') {
var obj = eval("S" + menus[i].id.substring(1,menus[i].id.length));
submenus = obj.all.tags("LI");
for (j=0;j<submenus.length; j++)
if (submenus[j].id==id)
break;
if (j==submenus.length) {
var obj1 = menus[i];
obj.style.display = "none";
obj1.className = "close";
}
}
}
}
function showMenu(menu, level) {
document.write('<UL id=S' + count + ((level>1)?' style="display:none"':'') + '>');
for (var i=0; i<menu.length; i+=2) {
if (typeof(menu[i+1])=="object") {
document.write('<LI id=M' + (++count) + ' class=close><a id=A' + count + ' href="#" onfocus="this.blur()" onclick="return ON_OFF(this)">' + menu[i] + '</a></LI>');
showMenu(menu[i+1], level + 1);
}
else
document.write('<LI class=' + ((menu.length> i+2)?'midnode':'lastnode') + '><a href="' + menu[i+1] + '" onfocus="this.blur()">' + menu[i] + '</a></LI>');
}
document.write('</UL>');
}
function ON_OFF(e) {
if (e.tagName=="A") {
closeAll("M" + e.id.substring(1,e.id.length));
var obj = eval("S" + e.id.substring(1,e.id.length));
var obj1 = eval("M" + e.id.substring(1,e.id.length));
if (obj.style.display=="none") {
obj.style.display = "block";
obj1.className = "open";
}
else {
obj.style.display = "none";
obj1.className = "close";
}
}
return false;
}
</script>
</head>

<body bgcolor="#CCCCCC" text="#000000" link="#000000" vlink="#000000" alink="#000000" class="close">
<p>
<script>showMenu(arrMenu, 1);</script>
</p>
</body>
</html>
formatkm 2003-09-01
  • 打赏
  • 举报
回复
用循环的嵌套
naomi77 2003-09-01
  • 打赏
  • 举报
回复
我在我某一个页面做了一个链接指向deeptree.htm,然后在浏览器中打开页面,通过链接转到该文件。
fason 2003-09-01
  • 打赏
  • 举报
回复
你具体是怎么使用的?我在ie5,6,ns7框架中都测试过
naomi77 2003-09-01
  • 打赏
  • 举报
回复
阿信,我下载了你的文件,但打开文件出错,第三行错误,没有权限,parent.LoadData(0)这一行。是哪儿出了问题?
naomi77 2003-08-31
  • 打赏
  • 举报
回复
mustapha1207@hotmail.com
chjpeng 2003-08-30
  • 打赏
  • 举报
回复
http://expert.csdn.net/Expert/topic/2188/2188654.xml?temp=.7946894
511214 2003-08-30
  • 打赏
  • 举报
回复
http://expert.csdn.net/Expert/topicview.asp?id=2174874
去这儿看看吧,有实例
liuruhong 2003-08-30
  • 打赏
  • 举报
回复
去fason的站点看看,你会有收获的,这段时间我正在写比较完善的tree对象
fason 2003-08-30
  • 打赏
  • 举报
回复
http://fason.nease.net/


you email?

28,390

社区成员

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

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