提到多级级联的下拉菜单选择,不得不提到另外一种效果:树型菜单。事实上,二者的数据结构是一致的:都是一颗二叉树。为了实现一颗二叉树,可以使用数组或者链表实现(学C的时候用的了)。不过,我觉得最适合的是XML,因为它的数据结构本身就是二叉树了通过对二叉树的遍历,就可以自动生成一个由XML指定的任意级数的下拉选单,或是树型菜单。代码曾经贴过...

解决方案 »

  1.   

    http://www.chinavisual.com:81/forum/viewtopic.php?t=34829
      

  2.   

    那个是15second的树型菜单了。多级级联选单也可以用js写个对象了这样的话,还要“尽情”讨论吗?
      

  3.   

    同意weidegong(weidegong),平时应用中一直利用xml的与身具来树型结构的特点,做连动菜单和树非常适合....
    ----------------------------------------------------------------
    好象不是二叉树吧;)
      

  4.   

    To sunbeamy(阳光灿烂的深夜) 
        为什么你要用“好像”呢?我是忘记了的,Sorry    http://thns.tsinghua.edu.cn:2000/lesson/ch06/0602.html
      

  5.   

    尽情讨论为的是集群家之长,不喜欢通过发email形式偷偷解决
    (有秘密无所谓,至少写出思路,不要糊里糊涂的解决方法)xml通过xsl过滤是慢,所以需要用js.dom来写,关注中
      

  6.   

    既然说到树,大家可以看看台湾同胞做的树形结构^_^(注意看那个ASP版的)
    http://dob.tnc.edu.tw/show_page.php?s=454&t=6
    我个人认为对于比较庞大的树,一次性把数据放到客户端数组里并不合适,台湾人做的树形结构则是根据用户选择逐步扩充客户端的树。说的不是很清楚
    ,不过看了例子估计大家会明白的。
      

  7.   

    你说的是类似于msdn.microsoft.com的树吧?
      

  8.   

    如果我有多行需要选择怎么办????
    如:
    var arrSel1=["one1","two1","three1","four1"];//arrSel1定义了要修改的下拉框
    var arrSel2=["one2","two2","three2","four2"];//arrSel2定义了要修改的下拉框
    var arrSel3=["one3","two3","three3","four3"];//arrSel3定义了要修改的下拉框
      

  9.   

    to zlgun(自由人):你的思路是正确的
    就像msdn上导航树一样,如果一下子下到客户端肯定开销很大....
    下面的例子前些日期草草写的,原来后台是sql server,用xml传输
    http://freehost25.websamba.com/yuxiaoyi/Tree/getCode.htm,有兴趣可以研究下
    ----------------------------------------------------------------
    to newli() 
    只能选择一个被选中的,不然无法连动吧....
      

  10.   

    答非所问,呵呵谁不贴个xml的?(简要一点)
    看xml的价值和精简程度加分
      

  11.   

    算了,还是我来自言自语吧,结账<select name=year></select>
    <select name=month></select>
    <select name=date></select>
    <select name=clock></select>
    <input name=result><script>
    var arrSel=["year","month","date","clock"];//arrSel定义了要修改的下拉框和xml数据的节点名称
    </script><xml id=xmldata>
    <xmldata>
    <year value="2000">
    <month value="4">
    <date value="14">
    <clock value="一点" />
    <clock value="三点" />
    </date>
    <date value="17">
    <clock value="一点" />
    </date>
    </month>
    <month value="5">
    <date value="15">
    <clock value="一点" />
    <clock value="四点" />
    <clock value="七点" />
    </date>
    </month>
    </year>
    <year value="2001">
    <month value="7">
    <date value="16">
    <clock value="一点" />
    <clock value="五点" />
    <clock value="九点" />
    </date>
    </month>
    </year>
    </xmldata>
    </xml><script>
    function qswhXml(num){
    /******* by qiushuiwuhen(2002-5-17) ********/
    var i,j,arrTemp=[];
    for(i=0;i<num;i++)arrTemp[i]=document.all(arrSel[i]).options[document.all(arrSel[i]).selectedIndex].text
    if(num==arrSel.length){//这里处理最后的数据。
    document.all("result").value="选中了("+arrTemp+")";return;
    }
    with(document.all(arrSel[num])){
    length=0
    var obj=document.all.xmldata.XMLDocument.childNodes[0];
    for(i=0;i<num;i++)obj=obj.selectSingleNode(arrSel[i]+'[@value="'+arrTemp[i]+'"]');
    for(i=0;i<obj.childNodes.length;i++)options[length++].text=obj.childNodes[i].getAttribute("value");
    onchange=new Function("qswhXml("+(num+1)+")");
    onchange();
    }
    }
    qswhXml(0);
    </script>