用JavaScript生成树结构(五)
</script>
</head>
<body bgColor=#f8f088 style="FONT-FAMILY:宋体;FONT-SIZE:14px">
<script>
<!--
InitTree();
ShowTree();
-->
</script>
</body>
</html>
在程序中,InitTree函数是初始化树结构的。其实,使用这种方法来初始树有不灵活的方面,一般我们是使用ASP或PHP等服务器端的脚本语言来做初始的工作,而仅仅把响应操作的函数使用客户端执行的脚本中。
并且,节点的信息也被储存在一个数据表中,比如ACCESS中。
定义表的结构如下:
字段 类型 长度 含义
Name 文本 50 节点名
Parent 文本 50 父节点
ImgClSm 文本 50 图片1
ImgClBg 文本 50 图片2
ImgOpSm 文本 50 图片3
Link 文本 50 功能链接
Target 文本 20 链接目标
Display 是/否 子树显示
其中只有一个节点为根节点,其Parent为Null。下面是在ASP中的InitTree函数:
<%@language=javascript%>
function InitTree()
{
 var node,i;
<%
 var conn=Server.CreateObject("ADODB.Connection"); //建立一个数据连接对象
 conn.Open("mydsn");  //打开连接
 SQL="Select * from node";  //数据查询语句
 var rs=conn.Execute(SQL);
 while(!rs.eof)  //将每个节点数据取出
 {
  %>
  node=new NODE("<%=rs("Name")%>");
  node.parent="<%=rs("Parent")%>";
  node.imgopsm="<%=rs("ImgOpSm")%>";
  node.imgclbg="<%=rs("ImgClBg")%>";
  node.imgclsm="<%=rs("ImgClSm")%>";
  node.link="<%=rs("Link")%>";
  node.target="<%=rs("Target")%>";
  <%
  if(rs("Display")=="Y"){%>node.display=true;
  <%}else{%>node.display=false;
  <%}
  rs.MoveNext();
 }
 rs.Close();
 conn.Close();
%>
 for(i=0;i<na.total;i++)
  if(na[i].parent=="Null")break;
 root=na[i];
 AddNode(root);
 curfocus=root;
}
function AddNode(node) //增加节点到父节点中
{
 var i;
 for(i=0;i<na.total;i++)
  if(na[i].parent==node.name)node.child.Add(na[i]);
 for(i=0;i<node.child.total;i++)
  AddNode(node.child[i]);
}
其它的函数同上,从结果可以看出,效果一样,而且我们可以通过改变数据表的内容,使得树的结构改变。
程序中打开的mydsn是一个ODBC数据源,是ASP与数据库连接的通道。可以在控制面板的ODBC数据源(32位)中设置。
以上程序在Win98/PWS/IE5.5中通过。