我们在数据库中的命名“列表”中有未知级别的子级和父级。每条记录都有 ID ,标题和父级(父级的ID)。顶级项的父级为0.
我们要打印所有行,这些行按照父项排列子项。使用服务器端脚本生成递归列表有很多解决方案。但我们希望在视觉上(客户端)对列表进行排序,以便将服务器的负载转移到客户端。
答案 0 :(得分:0)
孩子和父母的客户端排序是个好主意,因为将服务器的负载转移到客户端。此客户端脚本也是非递归的,只需一个循环即可解决问题!
第1步:
将所有元素打印为html div而不使用级别体系结构。但是我们说这个菜单是什么的父母和什么的子(设置为div的类)。我们还会在内存中保留一个id(s)命名 parentlist ,以便稍后在客户端脚本中使用。
假设 rs 作为记录集, objcon 作为连接对象(在vbScript中):
<%
parentlist="[0,"
sql="select * from list"
rs.open sql,objcon
while not rs.eof
parentlist=parentlist&"rs("id")&","
%>
<div class="child<%=rs("parent")%> parent<%=rs("id")%>"><%=rs("title")%></div>
<%
rs.movenext
wend
rs.close
'removing last comma and closing array
parentlist=Left(parentlist,Len(parentlist)-1)&"]"
%>
如果你想在视觉上对孩子进行分组而不是在父母的下面列出,那么为div(s)设置填充是个好主意。
第2步:
通过循环 parentlist 的数组,分离每个父项的子项并将它们附加到父项(使用Jquery):
<script type="text/javascript">
var parentlist=<%=parentlist%>;
for (i = 0; i < parentlist.length; i++)
{
$(".child"+parentlist[i]).detach().appendTo(".parent"+parentlist[i]);
}
</script>