客户端层次结构排序:来自数据库级别未知的子列表

时间:2015-03-31 22:16:06

标签: sorting recursion parent client-side hierarchy

我们在数据库中的命名“列表”中有未知级别的子级和父级。每条记录都有 ID 标题父级(父级的ID)。顶级项的父级为0.

我们要打印所有行,这些行按照父项排列子项。使用服务器端脚本生成递归列表有很多解决方案。但我们希望在视觉上(客户端)对列表进行排序,以便将服务器的负载转移到客户端。

1 个答案:

答案 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>