关于无限分级(ASP+数据库+JS)的实现代码
2018-09-06 12:13
  代码可以优化,请根据自己需求进行优化 
说明: 
所先把所有分类读取存放到JS数组中(如果数据量大可能就有点麻烦) 
当选择时候返回父分类ID在从数组中找出符合的分类,然后显示给用户 
数据库设计(可以根据自己需求添加字段,如此分类属于什么分类等等) 
字段类型说明 
id自动编号记录编号 
cotename文本分类名称 
byid数字父分类ID(即为此表ID,根接点时值为0) 
JS部分代码(命名为*.asp) 
复制代码 代码如下:
<%Dimconn 
conn.ConnectionString=Provider=Microsoft.Jet.OLEDB.4.0;&_ 
DataSource=&Server.MapPath(Cote.mdb) 
conn.Open 
%> 
functionCheckLm(thevalue){ 
varbyid=newArray(); 
varcotename=newArray(); 
varid=newArray(); 
vari; 
varid_s; 
varbyid_s; 
varcotename_s; 
varthevalue_r; 
vardata=<selectname=lmonchange=CheckLm(this.value)> 
id_s=; 
cotename_s=-选择-; 
<%setrs=server.CreateObject(adodb.recordset) 
sql=select*from[DB_Cote]Orderbybyid,id 
rs.opensql,conn,1,1 
i=0 
ifnotrs.eofthen 
dowhilenotrs.eof 
response.Write(id[&i&]=&rs(id)&;&chr(10)) 
response.Write(byid[&i&]=&rs(byid)&;&chr(10)) 
response.Write(cotename[&i&]=&rs(cotename)&;&chr(10)) 
rs.movenext 
i=i+1 
loop 
else 
response.Write(id[0]=0;byid[0]=0;cotename[0]=无分类;) 
endif 
rs.close 
setrs=nothing%> 
if(thevalue==nullthevalue==undefinedthevalue==){thevalue=0;} 
//if(lmvalue==nulllmvalue==undefinedlmvalue==){lmvalue=0;} 
for(k=0;k<id.length;k++){ 
if(thevalue==id[k]){id_s+=thevalue+;cotename_s+=cotename[k]+;thevalue_r=byid[k];break;}else{thevalue_r=0;} 
} 
for(i=0;i<id.length;i++){ 
if(thevalue==byid[i]){ 
id_s+=id[i]+;cotename_s+=cotename[i]+; 
} 
} 
if(id_s==-1){ 
for(i=0;i<id.length;i++){ 
if(thevalue==id[i]){ 
id_s+=id[i]+;cotename_s+=cotename[i]+; 
} 
} 
} 
id_v=id_s.split(); 
cotename_v=cotename_s.split(); 
varlength=id_v.length-1; 
for(j=0;j<length;j++){ 
if(thevalue==id_v[j]){ 
data+=<optionvalue=+id_v[j]+selected>+cotename_v[j]+</option>;} 
else{ 
data+=<optionvalue=+id_v[j]+>+cotename_v[j]+</option>; 
} 
} 
if(thevalue!=0){data+=<optionvalue=+thevalue_r+>上级分类</option>;} 
//alert(length+/+thevalue); 
varlm=document.getElementById(lmid); 
} 
<%Conn.Close:SetConn=Nothing%> 
调用页面代码
复制代码 代码如下:
<% 
Dimlm 
lm=request(lm) 
iflm=EmpytorNotIsnumeric(lm)thenlm=0 
%> 
<html> 
<scripttype=text/javascriptsrc=*.asp></script> 
<bodyonLoad=CheckLm(<%=lm%>)> 
<divid=lmid></div> 
</body> 
</html>
运行后结果 
 [Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]
数据库: 

递归 
复制代码 代码如下:
SubGetA(TheID) 
setrs=server.CreateObject(adodb.recordset) 
dimrs,sql 
sql=select*from[DB_Cote]WhereByIDin(&TheID&) 
rs.opensql,conn,1,1 
i=0 
ifnotrs.eofthen 
dowhilenotrs.eof 
response.Write(rs(cotename)&<br>) 
callGetA(Rs(id)) 
rs.movenext 
i=i+1 
loop 
endif 
rs.close 
setrs=nothing 
EndSub 
ifm=emptythenm=0 
callGetA(m) 
%>