原理是控件的显示与隐藏
这要看你的HTML怎么设计的了

解决方案 »

  1.   

    <div id="a1" ><span  onClick="isshow('a1')" style="color:#FF0000; cursor:pointer">非常</span>
    <div>11111</div>
    <div>22222</div>
    <div>33333</div>
    </div>
    <div id="a2" ><span onClick="isshow('a2')" style="color:#FF0000;cursor:pointer">讨厌</span>
    <div>44444</div>
    <div>55555</div>
    <div>66666</div>
    </div>
    <div id="a3"><span onClick="isshow('a3')" style="color:#FF0000;cursor:pointer">星期一</span>
    <div>77777</div>
    <div>88888</div>
    <div>99999</div>
    </div>
    <script>
    function ine(){
    for(var j=1;j<=3;j++)
    {for(var i=0;i<document.getElementById("a"+j).getElementsByTagName("div").length;i++)
    {document.getElementById("a"+j).getElementsByTagName("div")[i].style.display="none"}}
    }
    function isshow(e)
    {ine()
    for(var i=0;i<document.getElementById(e).getElementsByTagName("div").length;i++)
    document.getElementById(e).getElementsByTagName("div")[i].style.display=""}
    ine();
    </script>
    是这样吗???
      

  2.   

    <ul id="aa">
      <li> 1
        <ul>
          <li> 1_1 </li>
          <li> 1_2
            <ul>
              <li> 1_2_1 </li>
              <li> 1_2_2 </li>
            </ul>
          </li>
        </ul>
      </li>
      <li> 2
        <ul>
          <li> 2_1 </li>
        </ul>
      </li>
    </ul><script>function Each(list, fun){
        for (var i = 0, len = list.length; i < len; i++) { fun(list[i], i); }
    };Each(document.getElementById("aa").getElementsByTagName("li"), function(o){
        o.onclick = function(e){
            window.event ? window.event.cancelBubble = true : e.stopPropagation() ;
            var ul = o.getElementsByTagName("ul")[0];
            if(ul){ ul.style.display = ul.style.display == "none" ? "" : "none"; }
        }
    })
    </script>试试这个
      

  3.   

    楼上的方式有点复杂,效率有点低。其实只要记录一个当前展开的div的id,就可以用很简单的语句实现。
    点击某个标题a-》判断当前是否有子菜单处于打开状态,如果有,隐藏当前的菜单,如果没有继续-》展开a标题对应的子菜单,记录a标题的div的id玮当前展开的子菜单-》循环
      

  4.   

    我展开做好了,后面做不下去了,代码如下:<script> 
    <% 
    '二级数据保存到数组 
    set rs=server.createobject("adodb.recordset") 
    sql="select * from zy_class order by c_id desc"
    rs.open sql,conn,1,1 
    %> 
    var smallclass = new Array(); 
    //数组结构:一级值,二级值
    <% 
    count1 = 0 
    do while not rs.eof 
      %> 
      smallclass[<%=count1%>]=new Array('<%=rs("c_big")%>','<%=rs("c_name")%>');
      <% 
      count1 = count1 + 1 
      rs.movenext 
    loop 
    rs.close 
    %> 
    var i;
    function addrows(bigclass,ri) 
    {
      for (i=0; i <smallclass.length; i++)
        {
        if (smallclass[i][0] == bigclass)
          {
          var   row   =   classtable.insertRow(ri+1);//id=recordTable 
          row.className='tit1'; 
          row.style.backgroundColor="#ffffff";
          var   col   =   row.insertCell(0);
          col.innerHTML   =   "&nbsp;&nbsp;<a href='showclass.asp?bigclass="+bigclass+"&class="+smallclass[i][1]+"'>"+smallclass[i][1]+"</a>";  
          }
        }
    }
    </script> 
    <table width='180' cellspacing='1' cellpadding='0' bgcolor='#990100' align='center' id='classtable'>
    <%
    sqlb="select * from zy_bigclass order by c_id asc"
    set rsb=conn.execute(sqlb)
      do while not rsb.eof
        %>
        <tr bgcolor='#ffffff' class='tit1'><td onclick="addrows('<%=rsb("c_big")%>',this.parentNode.rowIndex);"><%=rsb("c_big")%></td></tr>
        <%
        rsb.movenext
      loop
      %>
    </table>
      

  5.   

    if (smallclass[i][0] == bigclass) 
    这个判断怎么只有一个分支啊?