我用.GetRows()从数据库中提取了所有记录,所以我现在有了一个大数组
arrTree = rsTree.GetRows()
为了确保它有效,我可以用这个打印:
dim x
response.write "<table>"
For x = 0 to ubound(arrTree, 2)
response.write "<tr>"
response.write("<td>" + trim(x+1))
response.write("<td>" + trim(arrTree(0,x))) 'ID
response.write("<td>" + trim(arrTree(1,x))) 'PARENT
response.write("<td>" + trim(arrTree(2,x))) 'NAME
next
response.write "</table>"
没关系,现在我想要一个递归函数来构建一个HTML树/菜单:这里是我遇到麻烦的地方
我试图将一个正常运行的PHP函数“移植”到ASP,但它不起作用并陷入循环
Function Tree(varAncestor, varArray)
' varAncestor is the parent from where to start
Dim x
varHasChildren = false
For x = 0 to ubound(varArray, 2)
If CInt(varArray(1,x)) = varAncestor Then
If (varHasChildren = false AND varAncestor <> 0) Then
varHasChildren = true
Response.Write("<ul>")
End If
%>
<li><% Response.Write(varArray(2,x)) %>
<% Call Tree(varArray(1,x), varArray) %>
</li>
<%
End If
Next
If (varHasChildren = true AND varAncestor <> 0) Then
Response.Write("</ul>")
End If
End Function
Response.Write("<ul>")
Call Tree(0, arrTree)
Response.Write("</ul>")
这有什么问题,但我无法理解......请你帮忙吗?
提前致谢
答案 0 :(得分:1)
好的,终于做到了!这是基本版
Function Tree(varAncestor, varArray)
varHasChildren = false
For x = 0 to ubound(varArray, 2)
If (CInt(varArray(1, x)) = varAncestor) Then
If (varHasChildren = false AND varAncestor > 0) Then
varHasChildren = true
Response.Write("<ul>")
End If
%>
<li><% Response.Write(varArray(2, x)) %>
<% Call Tree(varArray(0, x), varArray) %>
</li>
<%
End If
Next
If (varHasChildren = true AND varAncestor > 0) Then
Response.Write("</ul>")
End If
End Function
这是我使用的改进版本:
Function Tree(varAncestor, varArray)
varHasChildren = false
For x = 0 to ubound(varArray, 2)
If (CInt(varArray(1, x)) = varAncestor) Then
If (varHasChildren = false AND varAncestor > 0) Then
varHasChildren = true
Response.Write("<ul>")
End If
%>
<li class="<% If (Request.QueryString("iCat") = CStr(varArray(0, x))) Then Response.Write("active") %>">
<a href="cat.asp?iCat=<% Response.Write(varArray(0, x)) %>">
<span class="fa fa-fw fa-folder-o text-warning"></span>
<% Response.Write(varArray(2, x)) %>
</a>
<% Call Tree(varArray(0, x), varArray) %>
</li>
<%
End If
Next
If (varHasChildren = true AND varAncestor > 0) Then
Response.Write("</ul>")
End If
End Function