遇到了一个比较特殊的客户,我们后台程序在刚开始制作初期就已经考虑到无限级别的类别分类,可一般的产品前台在调用的时候,都是采用简单的二级目录分类,这个客户要求可以在后台添加四级的目录,这不,没办法了,只能改改前台的JS显示脚本代码吧,还好网络上这样的代码比较全,下面就直接把代码贴出来,大家瞧瞧。

1、数据库表结构 Class
ID 自动编号
ClassName 文本 类别名称
ClassRoot 数字 父类别ID值

2、JS脚本
//左侧导航
function showSub(clsid)
{
    var obj=document.getElementById(clsid);
    if (!obj) return;
    with(obj){
        style.display=(style.display=="block")?"none":"block";
    }
}
function changeIcon(objid)
{
    var obj=document.getElementById(objid);
    if (!obj) return;
    var tmpsrc=(obj.src.indexOf(picArr[2])==-1)?picArr[2]:picArr[1];
    obj.src=tmpsrc;
}

function getSubCls(topID)
{
    var tmpstr=eval("clsStr.match(/\\${3}"+topID+"\\|{2}[^$]*/g)");
    return tmpstr;
}

function listProCLass(ver)
{
    var tmpArr,tmp,tmp2,tmp3,tmp4,tmp5,icon;
    ver=(ver==1)?1:0;
    tmp=getSubCls(0);
    if (!tmp) return;
    for (var i=0;i<tmp.length;i++)
    {
        tmpArr=tmp[i].replace(/\${3}/,"").split("||");
        tmp2=getSubCls(tmpArr[1]);
        icon=picArr[0];
        document.writeln("<div style=\"border-bottom:1px solid #D2D2D2;\">");
        document.writeln("<table width=\"98%\" align=\"center\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\" onmouseover=\"this.style.backgroundColor=\'#F7FCFF\'\" onmouseout=\"this.style.backgroundColor=\'\'\">");
        document.writeln("  <tr>");
        document.writeln("    <td><table width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\" >");
        document.writeln("      <tr>");
        document.writeln("        <td width=\"30\"><div align=\"center\" class=\"lev0\"><img src=\""+icon+"\"  class=\"icon\"  \/><\/div><\/td>");
        if (!tmp2){
            document.writeln("        <td height=\"24\" valign=\"middle\" style=\"padding-top:3px;\"><div align=\"left\"><a href=\""+linkArr[ver]+"?clsid="+tmpArr[1]+"\" id=\"prolink"+tmpArr[1]+"\">"+tmpArr[ver+2]+"</a><\/div><\/td>");
        }
        else{
            document.writeln("        <td height=\"24\" valign=\"middle\" style=\"padding-top:3px;\"><div align=\"left\"><a href=\"javascript:void(0);\" onclick=\"showSub(\'cls"+tmpArr[1]+"\');\" id=\"prolink"+tmpArr[1]+"\" class=\"clslink1\">"+tmpArr[ver+2]+"</a><\/div><\/td>");
        }
        document.writeln("      <\/tr>");
        document.writeln("    <\/table><\/td>");
        document.writeln("  <\/tr>");
        document.writeln("<\/table>");
        if (!tmp2){document.writeln("</div>");continue;}
        document.writeln("<div id=\"cls"+tmpArr[1]+"\" class='sub1'>");
        for (var j=0;j<tmp2.length;j++)
        {
            var tmpArr2=tmp2[j].replace(/\${3}/,"").split("||");
            tmp3=getSubCls(tmpArr2[1]);
            document.writeln("<table width=\"100%\" align=\"center\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">");
            document.writeln("  <tr>");
            document.writeln("    <td><table width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\" onmouseover=\"this.style.backgroundColor=\'#F7FCFF\'\" onmouseout=\"this.style.backgroundColor=\'\'\">");
            document.writeln("      <tr>");
            icon=(!tmp3)?picArr[3]:picArr[1];
            document.writeln("        <td width=\"23\"><div align=\"center\" class=\"lev1\"><img src=\""+icon+"\" id=\"cls"+tmpArr2[1]+"_icon\" class=\"icon\"  \/><\/div><\/td>");
            if (!tmp3){
                document.writeln("        <td height=\"20\"><div align=\"left\"><a href=\""+linkArr[ver]+"?clsid="+tmpArr2[1]+"\" id=\"prolink"+tmpArr2[1]+"\" class=\"clslink2\">"+tmpArr2[ver+2]+"</a><\/div><\/td>");
            }
            else{
                document.writeln("        <td height=\"20\"><div align=\"left\"><a href=\"javascript:void(0);\" onclick=\"showSub(\'cls"+tmpArr2[1]+"\');changeIcon(\'cls"+tmpArr2[1]+"_icon\');\" id=\"prolink"+tmpArr2[1]+"\">"+tmpArr2[ver+2]+"</a><\/div><\/td>");
            }
            document.writeln("      <\/tr>");
            document.writeln("    <\/table><\/td>");
            document.writeln("  <\/tr>");
            document.writeln("<\/table>");

            if (!tmp3) continue;
            document.writeln("<div id=\"cls"+tmpArr2[1]+"\"class='sub2'>");
            for (var k=0;k<tmp3.length;k++)
            {
                var tmpArr3=tmp3[k].replace(/\${3}/,"").split("||");
                tmp4=getSubCls(tmpArr3[1]);
                icon=(!tmp4)?picArr[3]:picArr[1];
                document.writeln("<table width=\"100%\" align=\"center\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">");
                document.writeln("  <tr>");
                document.writeln("    <td><table width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\" onmouseover=\"this.style.backgroundColor=\'#F7FCFF\'\" onmouseout=\"this.style.backgroundColor=\'\'\">");
                document.writeln("      <tr>");
                document.writeln("        <td width=\"23\"><div align=\"center\" class=\"lev2\"><img src=\""+icon+"\" id=\"cls"+tmpArr2[1]+"_icon\" class=\"icon\"  \/><\/div><\/td>");
                if (!tmp4){
                    document.writeln("        <td height=\"20\"><div align=\"left\"><a href=\""+linkArr[ver]+"?clsid="+tmpArr3[1]+"\" id=\"prolink"+tmpArr3[1]+"\" class=\"clslink2\">"+tmpArr3[ver+2]+"</a><\/div><\/td>");
                }
                else{
                    document.writeln("        <td height=\"20\"><div align=\"left\"><a href=\"javascript:void(0);\" onclick=\"showSub(\'cls"+tmpArr3[1]+"\');changeIcon(\'cls"+tmpArr3[1]+"_icon\');\" id=\"prolink"+tmpArr3[1]+"\">"+tmpArr3[ver+2]+"</a><\/div><\/td>");
                }
                document.writeln("      <\/tr>");
                document.writeln("    <\/table><\/td>");
                document.writeln("  <\/tr>");
                document.writeln("<\/table>");
                if (!tmp4) continue;
                document.writeln("<div id=\"cls"+tmpArr3[1]+"\"class='sub3'>");
                for (var m=0;m<tmp4.length;m++)
                {
                    var tmpArr4=tmp4[m].replace(/\${3}/,"").split("||");
                    tmp5=getSubCls(tmpArr4[1]);
                    icon=(!tmp5)?picArr[3]:picArr[1];
                    document.writeln("<table width=\"100%\" align=\"center\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">");
                    document.writeln("  <tr>");
                    document.writeln("    <td><table width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\" onmouseover=\"this.style.backgroundColor=\'#F7FCFF\'\" onmouseout=\"this.style.backgroundColor=\'\'\">");
                    document.writeln("      <tr>");
                    document.writeln("        <td width=\"23\"><div align=\"center\" class=\"lev3\"><img src=\""+icon+"\" id=\"cls"+tmpArr2[1]+"_icon\" class=\"icon\"  \/><\/div><\/td>");
                    if (!tmp5){
                        document.writeln("        <td height=\"20\"><div align=\"left\"><a href=\""+linkArr[ver]+"?clsid="+tmpArr4[1]+"\" id=\"prolink"+tmpArr4[1]+"\" class=\"clslink2\">"+tmpArr4[ver+2]+"</a><\/div><\/td>");
                    }
                    else{
                        document.writeln("        <td height=\"20\"><div align=\"left\"><a href=\"javascript:void(0);\" onclick=\"showSub(\'cls"+tmpArr4[1]+"\');changeIcon(\'cls"+tmpArr4[1]+"_icon\');\" id=\"prolink"+tmpArr4[1]+"\">"+tmpArr4[ver+2]+"</a><\/div><\/td>");
                    }
                    document.writeln("      <\/tr>");
                    document.writeln("    <\/table><\/td>");
                    document.writeln("  <\/tr>");
                    document.writeln("<\/table>");
                    if (!tmp5) continue;
                    document.writeln("<div id=\"cls"+tmpArr4[1]+"\"class='sub4'>");
                    for (var n=0;n<tmp5.length;n++)
                    {
                        var tmpArr5=tmp5[n].replace(/\${3}/,"").split("||");
                        icon=picArr[3];
                        document.writeln("<table width=\"100%\" align=\"center\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">");
                        document.writeln("  <tr>");
                        document.writeln("    <td><table width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\" onmouseover=\"this.style.backgroundColor=\'#F7FCFF\'\" onmouseout=\"this.style.backgroundColor=\'\'\">");
                        document.writeln("      <tr>");
                        document.writeln("        <td width=\"23\"><div align=\"center\" class=\"lev4\"><img src=\""+icon+"\" id=\"cls"+tmpArr2[1]+"_icon\" class=\"icon\"  \/><\/div><\/td>");
                        document.writeln("        <td height=\"20\"><div align=\"left\"><a href=\""+linkArr[ver]+"?clsid="+tmpArr5[1]+"\" id=\"prolink"+tmpArr5[1]+"\" class=\"clslink2\">"+tmpArr5[ver+2]+"</a><\/div><\/td>");
                        document.writeln("      <\/tr>");
                        document.writeln("    <\/table><\/td>");
                        document.writeln("  <\/tr>");
                        document.writeln("<\/table>");
                    }
                    document.writeln("</div>");
                }
                document.writeln("</div>");
            }
            document.writeln("</div>");
       }
       document.writeln("</div>");
       document.writeln("</div>");
    }
}

//保留显示子系列
function keepSubCls()
{
    var tmpstr;
    var id;
    var panel;
    if (!clsid.match(/^[1-9]\d*$/)) return;
    tmpstr=eval("clsStr.match(/\\${3}(\\d+)\\|{2}"+clsid+"\\|{2}[^$]*/)");
    if (!tmpstr) return;
    tmpstr=tmpstr.toString();
    id=tmpstr.replace(/^\${3}(\d+)\|{2}.*/,"$1")
    panel=document.getElementById("cls"+id);
    if (!panel) return;
    panel.style.display="block";
    //改变当前系列的字体样式
    //document.getElementById("prolink"+clsid).style.textDecoration="underline";
    document.getElementById("prolink"+clsid).style.borderBottom="1px dashed #f60";
   
    while (id>0)
    {
        tmpstr=eval("clsStr.match(/\\${3}(\\d+)\\|{2}"+id+"\\|{2}[^$]*/)");
        if (!tmpstr) return;
        tmpstr=tmpstr.toString();
        id=tmpstr.replace(/^\${3}(\d+)\|{2}.*/,"$1");
        panel=document.getElementById("cls"+id);
        if (!panel) return;
        panel.style.display="block";
    }
}

3、HTML调用代码
<SCRIPT type=text/javascript>
<!--
<%
Response.Write("var clsStr=""")
Set Conn=server.createobject("adodb.connection")
conn.open "driver={microsoft access driver (*.mdb)};dbq="&server.mappath("*.mdb")
Set Rs=Server.CreateObject("Adodb.RecordSet")
Sql="Select * From [Class] Order By ClassRoot Asc"
Rs.Open Sql,Conn,1,1
Do While Not Rs.Eof
Response.Write("$$$"&Rs("ClassRoot")&"||"&Rs("ID")&"||"&rs("ClassName")&"||"&rs("ClassName"))
Rs.MoveNext
Loop
rs.Close
Set rs=Nothing
Conn.Close
Set Conn=Nothing
Response.Write("$$$""")
%>
//var clsStr="$$$0||568||离合器系统||Clutch System$$$0||513||汽车配件||Auto Spare Parts$$$0||514||摩托车配件||Motorcycle Spare Parts$$$0||517||安防产品||Security Products$$$568||718||离合器修理包||Clutch Repair Kit$$$568||569||离合器盖||Clutch Cover$$$533||717||雨刮电机||Wiper Motor$$$529||713||凸轮轴||Camshaft$$$529||712||曲轴||Crankshaft$$$529||711||汽缸垫||Gasket$$$529||710||冷凝器||Condenser$$$529||709||散热器||Radiator$$$529||708||活塞||Piston$$$529||707||化油器||Carburetor$$$529||706||水泵||Water Pump$$$530||705||中控锁||steering wheel lock$$$530||704||方向盘锁||steering wheel lock$$$530||703||方向机||Steering Gear$$$514||700||点火开关||switch kit$$$514||699||刹车片||Brake Pad$$$514||698||启动杆||Kick Starter$$$514||697||连杆||Connection Rod$$$514||696||减震器||Shock Absorber$$$627||695||后视镜||Side Mirror$$$514||694||电子点火器||CDI$$$514||692||碟刹||Dish Brake$$$514||691||油开关||Fuel Cock$$$514||690||气门摇臂||Rocker Arm Valve$$$514||689||整流器||Rectifier$$$514||688||凸轮轴||Camshaft$$$646||687||手把开关||handle switch$$$514||686||刹车蹄块||Brake Shoes$$$514||685||气门导管||Valve Pipe$$$514||684||气门||Valve$$$514||683||启动马达||Starter Motor$$$514||682||轮毂||Hub$$$514||680||火花塞||Spark Plug$$$514||679||活塞||Piston$$$646||678||点火线圈||Ignition Coil$$$514||677||磁电机||Magnet Winding$$$627||671||油箱||Fuel Tank$$$514||670||液压制动器||tray-type hydraulic brake$$$514||669||套锁||Set Lock$$$646||668||尾灯座||Tail Lamp Holder$$$646||667||闪光器||Flasher$$$664||666||后刹车灯开关||Rear Brake Light Switch$$$664||665||前刹车灯开关||Front Brake Light Switch$$$646||664||刹车灯开关||Brake Light Switch$$$654||663||前叉修理包||front arm repair kit$$$657||662||汽油滤清器||Fuel Filter$$$514||661||链轮套件||wheel sprocket set$$$514||660||仪表盘||Speedometer$$$654||659||离合器修理包||clutch repair kit$$$657||658||空气滤清器||Air Filter$$$514||657||滤清器||Filter$$$514||656||火花帽||Spark Plug Cap$$$654||655||化油器修理包||Carburetor Repair Kit$$$514||654||修理包||Repair Kit$$$646||653||大灯座||head light holder$$$646||652||油压传感器||Oil Pressure Switch$$$646||650||全车线||Wire Harness$$$514||649||曲轴总成||Crankshaft Assy$$$514||648||汽缸系列||Cylinder System$$$646||647||启动继电器||Starter Relay$$$514||646||开关电器||Switch and other Electronic parts$$$514||645||减震器||Shock Absorber$$$514||644||化油器||Carburetor$$$627||643||车灯||Lamp$$$514||642||超越离合器||Sprag Clutch$$$627||641||后保险杠||Rear Bumper$$$514||640||刹车杆||Brake Bar$$$514||639||启动杆||Kick Starter$$$514||638||车把||Handle Bar$$$514||637||变速杆||Gear Pedal$$$628||635||其他||Others$$$628||634||Summer||Summer$$$628||633||open face||Open Face$$$628||631||童盔||Kids Helmet$$$628||630||半盔||Half Face$$$628||629||全盔||Full Face$$$627||628||头盔||Helmet$$$514||627||车身件||Body Parts$$$517||626||其他||Others$$$517||625||头盔||Helmet$$$614||624||others||others$$$614||622||LTF2-8000 Series||LTF2-8000 Series$$$614||621||LTF2-6000 Series||LTF2-6000 Series$$$517||617||警示灯||Alarm Light$$$517||616||扬声器||Loudspeaker$$$517||615||警报器||Siren$$$517||614||长排灯||light bar$$$529||613||燃油泵||Fuel Pump$$$610||612||燃油滤清器||Fuel Filter$$$610||611||空气滤清器||Air Filter$$$513||610||滤清器||Filter$$$556||609||雨刮||Wiper Blades$$$531||608||控制臂||Control Arm$$$531||607||拉杆||Tie Rod$$$531||606||转向节||Steering Knuckle$$$531||605||稳定杆||Stabilizer Bar$$$531||604||扭力杆||torsion bar$$$531||602||传动轴||Drive Shaft$$$533||601||电瓶夹||Storage Battery Clamp$$$533||600||水温感应塞||Water Temperature Sensor$$$533||599||调节器||Regulator$$$533||598||刹车灯开关||Stop Light Switch$$$533||597||玻璃升降开关||Power Window Switch$$$533||596||其他||OTHERS$$$533||595||油压开关||Oil Pressure Switch$$$533||594||点火开关||Ignition Switch$$$533||593||连接线||Housing Connector Wire$$$533||592||大灯开关||Head Lamp Switch$$$533||591||组合开关||Combination Switch$$$533||589||点烟开关||Cigarette Lighter Switch$$$532||588||刹车蹄||Brake Shoe$$$532||587||刹车片||Brake Pad$$$532||586||刹车盘||Brake Disc$$$531||585||减震器||Shock Absorber$$$551||584||同步器||Synchronizer Series$$$551||583||差速器||Differential$$$551||581||万向节||Universal Joint$$$551||580||减速器||Reducer Suit$$$551||579||半轴||Axle Shaft$$$551||578||球笼||C.V.JOINT$$$533||577||保险盒||Fuse Box$$$574||576||油式点火线圈||Oil Ignition Coil$$$574||575||干式点火线圈||Dry Ignition Coil$$$533||574||点火线圈||Ignition Coil$$$533||573||闪光器||Flasher$$$568||572||离合器面片||Clutch Facing$$$568||571||分离轴承||Release Bearing$$$568||570||离合器片||Clutch Disc$$$565||567||装饰套件||Decoration Suit$$$556||566||摇手把||Swing Door Handle$$$556||565||其他附件||Accessories$$$560||564||起亚||KIA$$$560||562||现代||HYUNDAI$$$560||561||大宇||DAEWOO$$$556||560||车灯||Car Lamp$$$556||559||观后镜||Rearview Mirror$$$556||557||保险杠和格栅||Bumper and Grille$$$513||556||车身件||Car Body Parts and Accessories$$$513||551||传动系统||Transmission System$$$533||534||继电器||Relay$$$513||533||汽车电子电器||Auto Electronic Parts$$$513||532||制动系统||Brake system$$$513||531||底盘系统||Chassis system$$$513||530||转向系统||Steering system$$$513||529||发动机系统||Engine system$$$514||512||摩托车附件||motorcycle accessories$$$610||498||机油滤清器||OIL FILTER$$$529||494||机油泵||OIL PUMP$$$627||492||油箱||FUEL TANK$$$";

    var linkArr=new Array("Seriesproducts.asp","Seriesproducts.asp");
    var picArr=new Array("images/arrow_1.gif","images/arrow_1.gif","images/arrow_1.gif","images/arrow_2.gif");
    var ver;
    //缓存图片
    var preload=new Array();
    for (var i=0;i<picArr.length;i++)
    {
        preload[i]=new Image();
        preload[i].src=picArr[i];
    }
    //-->
    </SCRIPT>

            <DIV style="MARGIN: 0px auto; WIDTH: 98%">
            <SCRIPT type=text/javascript>
    <!--
    listProCLass(1);
    //保留当前子系列
    var clsid="718";  //clsid可以使用request参数获得
    keepSubCls();
    //-->
    </SCRIPT>
    </DIV>

附件下载:JS脚本 HTML页面