//********************** index.asp ************************//
<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%> <%Option Explicit%> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <title>tree</title> <link href="css/style.css" rel="stylesheet" type="text/css"> <script language="JavaScript"> <!-- var d1,d2;
function expand(id) { var d=new Date(); d1=d.valueOf();
var s_id = eval("s" + id); var dir_id = eval("dir" + id); if(s_id.href != '') { //window.open(s_id.href); //or //top.frames['FrameName'].location.href = s_id.href; }
switch(dir_id.open) { //改变"+","-" case "true": { with(dir_id) { innerText = "+"; open = "false"; className = 'dirclose'; } if(document.getElementById("t" + id)) { eval("t"+id).style.display = 'none'; document.getElementById("load_" + id).style.display = 'none'; return; } else { document.getElementById("load_" + id).style.display = 'none'; } break; } case "false": { with(dir_id) { innerText = "-"; open = "true"; className = 'diropen'; } document.getElementById("load_" + id).style.display = ''; if(document.getElementById("t" + id)) { eval("t" + id).style.display = ''; eval("load_" + id).style.display = 'none'; return; } else { document.frames['hifm'].location.replace("subtree.asp?id=" + id); } break; } default:dir_id.innerText = "."; dir_id.className = 'dirNode'; return; }
}
function ArrToHtml(ArrNode,nodeid) { //输出到页面 var node_html = '<table id="t' + nodeid + '" width="100%" border="0" style="position: relative; left: 18px;" cellspacing="0" cellpadding="0">';
var str,opened,cls for (var i = 0; i < ArrNode.length; i++) { if (ArrNode[i].iChildren == 0) { str = '.'; opened = 'no'; cls = 'dirNode'; } else { str = '+'; opened = 'false'; cls = 'dirclose'; }
node_html += '<tr><td id="node' + ArrNode[i].id + '" class="td_node" valign="top"><span class="' + cls + '" id="dir' + ArrNode[i].id + '" onclick="expand(' + ArrNode[i].id + ')" open="' + opened + '">' + str + '</span><span class="node" id="s' + ArrNode[i].id + '" onclick="expand(' + ArrNode[i].id + ')" title="' + ArrNode[i].Content + '" href="' + ArrNode[i].strLink + '">' + ArrNode[i].Content + '</span></td></tr>';
if (ArrNode[i].iChildren > 0) { node_html += '<tr id="load_' + ArrNode[i].id + '" style="display: none"><td class="td_node"><table border="0" cellspacing="0" cellpadding="0" style="position: relative; left: 18; top: 0px"><tr><td class="td_node"><span class="dirNode">.</span><span class="load">Loading...</span></td></tr></table></td></tr>'; } }
node_html += '</table>'; if (document.getElementById("load_" + nodeid)) { document.getElementById("load_" + nodeid).style.display = "none"; document.getElementById("node" + nodeid).innerHTML += node_html; var d=new Date(); d2=d.valueOf(); message.innerHTML = "耗时:"+(d2-d1)+"ms"; } } --> </script> </head>
<body topmargin="0" leftmargin="0" scroll="yes"> <% Dim conn,rs Dim s,open,cls On Error Resume Next Set conn = Server.CreateObject("ADODB.Connection") conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.mappath("tree/tree.mdb") & ";Persist Security Info=False" Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open "select *,(select count(*) from deeptree where parentid = T.id) as children from deeptree T where parentid=0 order by parentid",conn,1,3 %> <div id="message" style="height: 20px" align="center"> </div> <div align="center"> <center> <table border="0" width="100%" cellspacing="0" cellpadding="0" height="100%" bgcolor="#F2F2F2"> <tr> <td width="260" valign="top" align="left"> <div id="treedir" style="overflow: auto; width: 30%; height: 100%;"> <table border="0" cellspacing="0" cellpadding="0" style="position: relative; left: 18px; top: 20px;" width="100%"> <% Do While Not rs.EOF If rs("children") = 0 Then s = "." open = "no" cls = "dirNode" Else s = "+" open = "false" cls = "dirclose" End If %> <tr> <td id="node<% = rs("id")%>" class="td_node" valign="top"><span class="<% = cls %>" id="dir<% = rs("id") %>" onclick="expand(<%=rs("id")%>)" open="<% = open %>"><% = s %></span><span class="node" id="s<% = rs("id") %>" onclick="expand(<% = rs("id") %>)" title="<% = Trim(rs("content")) %>" href="<% = Trim(rs("link")) %>"><% = rs("content") %></span> </td> </tr> <% If rs("children") > 0 Then%> <tr id="load_<% = rs("id") %>" style="display: none"> <td class="td_node"> <table border="0" cellspacing="0" cellpadding="0" style="position:relative;left:18;top:0" width="100%"> <tr> <td class="td_node"><span class="dirNode">.</span><span class="load">Loading...</span> </td> </tr> </table> </td> </tr> <%End If%> <% rs.MoveNext Loop %> </table> </div> </td> </table> </center> </div> <% Set rs = Nothing Set conn = Nothing %> <iframe id='hifm' width=0 height=0 style="display: none" height="100%" width="100%"></iframe> </body> </html>
///****************** subtree.asp *********************//
<%Option Explicit%> <script language="JavaScript"> function NodeClass(id,Content,strLink,iChildren) { //this.id=parseInt(id); this.id=id; this.Content=Content; this.strLink=strLink; this.iChildren=iChildren; //this.iChildren=parseInt(iChildren); }
var ArrNode = new Array(); <% Dim conn,rs,s,cls,href,Open Dim nodeid,i nodeid = Request.QueryString("id") 'On Error Resume Next Set conn = Server.CreateObject("ADODB.Connection") conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.mappath("tree/tree.mdb") & ";Persist Security Info=False" Set rs = Server.CreateObject("ADODB.Recordset") rs.Open "select *,(select count(*) from deeptree where parentid = T.id) as children from deeptree T where parentid=" & nodeid & "",conn,1,3 i=0 Do While Not rs.EOF %> ArrNode[<%=i%>] = new NodeClass(<%=rs("id")%>,'<%=trim(rs("content"))%>','<%=trim(rs("link"))%>',<%=rs("children")%>); <%
i=i+1 rs.MoveNext Loop
Set rs = Nothing %> parent.ArrToHtml(ArrNode,'<% = nodeid %>'); --> </script> <% Set conn = Nothing %>
//********************* node.htc *********************//
<PUBLIC:COMPONENT> <PUBLIC:ATTACH EVENT="onmouseover" ONEVENT="fos()"/> <PUBLIC:ATTACH EVENT="onmouseout" ONEVENT="blu()"/> <PUBLIC:ATTACH EVENT="onselectstart" ONEVENT="st()"/> <SCRIPT> function fos(){ if(style.backgroundColor!='#ffffff'){ style.color="#000000" style.border="1 solid #888888" style.backgroundColor='#DDDDDD' } else {style.color="#000000" style.border="1 solid #999999" style.backgroundColor='#ffffff' } }
function blu(){ if(style.backgroundColor!='#ffffff'){ style.color="#000000" style.border="1 solid #f2f2f2" style.backgroundColor='#f2f2f2' } else {style.color="#000000" style.border="1 solid #999999" style.backgroundColor='#ffffff' } }
function st(){ return false; } </SCRIPT> </PUBLIC:COMPONENT>
//*************************** style.css ****************//
body{font-size:12px} #txt{font-size: 12px; color: #000000; font-family: Courier New;border:1 solid #3366cc} #hrf{font-size: 12px; color: #000000; font-family: Courier New;border:1 solid #3366cc} #sb{font-size: 12px; color: #000000; font-family: Courier New;background-color:#d2e8ff;border:1 solid #3366cc;cursor:hand} .node{position:relative;left:2;height:20;padding:3 3 1 3;font-size:12px;font-family: Courier New;cursor:hand;border:1 solid #f2f2f2;behavior:url(css/node.htc)} .load{position:relative;left:2;height:20;padding:1 3 1 3;font-size:12px;font-family: Courier New;cursor:hand;border:1 solid #999999;background-color:#f2f2f2;color:#999999} .td_node{height:22px} #treedir{ } span.diropen { padding-left:2px; overflow:hidden; line-height:3px; font-size:12px; padding-top:5px; width:11px; height:11px; border:solid 1px black; background-color:#ffffff; cursor:hand; } span.dirclose { line-height:6px; font-size:9px; overflow:hidden; padding:2px; width:11px; height:11px; border:solid 1px black; background-color:#ffffff; cursor:hand; } .dirNode { font-weight:bold overflow:visible; font-size:9px; line-height:3px; padding: 1px 1px 0px 3px; width:11px; height:11px; border:solid 1px black; background-color:#ffffff; cursor:hand; }
// 把 node.htc, style.css 保存与 css 目录下. index.asp subtree.asp 放与根目录. 另新建一ACCESS数据库 tree.mdb 表deeptree 结构为 id,content, parentid,link |