<script type="text/javascript"> 
function init(){ 
//断判是否支持document.getElementById 和 document.getElementsByTagName
if(!document.getElementById || !document.getElementsByTagName){retun;} 
var arrayDiv=document.getElementById("levelmenu"); 
if(!arrayDiv){return;} 
var divObj=arrayDiv.getElementsByTagName("div");//这句就是获取到包在ul外面的所有div了 ,是个数组
var length=divObj.length; 
var agreeDiv=new Array(); 
for(var i=0;i <length;i++){ 
  if(divObj[i].className.indexOf("unit")>=0){ //这个条件是说:如果这个div的class里有unit这么个字符串就成立
  //其实divObj里的每个div的class都有
  agreeDiv.push(divObj[i]);//把这个div压入数组; 
  divObj[i].onclick=function(event){ //给这个每个 div 添加click事件
    showCurrentMenu(agreeDiv,this,event); 
  } 
  } 


function showCurrentMenu(agreeDiv,currentObj,event){ 
if(!event){event=window.event;} //获取事件对象
var eventObj=event.srcElement?event.srcElement:event.target; //获取事件源对象
var length=agreeDiv.length; 
for(var i=0;i <length;i++){ 
  if(eventObj.parentNode==agreeDiv[i] || eventObj.nodeName!="H5"){continue;} //parentNode表示父结点
  agreeDiv[i].className="unit"; 

if(eventObj.nodeName=="H5"){ 
  if(eventObj.parentNode.className=="unit"){ 
  eventObj.parentNode.className="unit current" 
  }else{ 
  eventObj.parentNode.className="unit" 
  } 


init(); 
</script>其实我这么解释你可能跟本还不懂这个菜单的运作原理这个还在结合css,要学富客户端你最少要懂三样css,js,dom

解决方案 »

  1.   

    css我懂,dom还不懂,正在学习中非常谢谢!
      

  2.   


    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
    <html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
    <script type="text/javascript"> </script> 
    <title>left </title> 
    <style type="text/css"> 
    body {font-family:Arial, Helvetica, sans-serif;font-size:12px;width:166px;margin:0 auto;} 
    ul,h5{margin:0;padding:0;list-style:none;} 
    #levelmenu{margin:8px 0 0 8px;} 
    #levelmenu div.unit ul{width:127px;border:solid 1px #1A5189;border-top:none;padding:8px 0 8px 20px;} 
    #levelmenu h5{width:149px;height:25px;line-height:26px;overflow:hidden;background:#515E7B url(http://2.bp.blogspot.com/_bdBPvgEipxw/SSO2rZ3z94I/AAAAAAAAAQE/WH2dc6R8TzQ/s320/menubg.gif) left top no-repeat;text-indent:30px;font-weight:normal;color:#fff;margin:0;font-size:100%;cursor:default;} 
    #levelmenu div.unit ul{display:none;line-height:23px;} 
    #levelmenu div.current ul{display:block;} 
    #levelmenu div.current ul li a{color:#3B475F;text-decoration:none;} 
    #levelmenu div.current ul li a:hover{text-decoration:underline;} 
    #levelmenu div.current h5{background-position:left bottom;} 
    </style> 
    </head> 
    <body> 
    <div id="levelmenu"> 
    <div class="unit current"> 
      <h5>新闻管理 </h5> 
      <ul> 
      <li> <a href="#">新闻管理 </a> </li> 
      <li> <a href="#">新闻管理 </a> </li> 
      <li> <a href="#">新闻管理 </a> </li> 
      <li> <a href="#">新闻管理 </a> </li> 
      </ul> 
    </div> 
    <div class="unit"> 
      <h5>新闻管理 </h5> 
      <ul> 
      <li> <a href="#">新闻管理 </a> </li> 
      <li> <a href="#">新闻管理 </a> </li> 
      <li> <a href="#">新闻管理 </a> </li> 
      <li> <a href="#">新闻管理 </a> </li> 
      </ul> 
    </div> 
    <div class="unit"> 
      <h5>新闻管理 </h5> 
      <ul> 
      <li> <a href="#">新闻管理 </a> </li> 
      <li> <a href="#">新闻管理 </a> </li> 
      <li> <a href="#">新闻管理 </a> </li> 
      <li> <a href="#">新闻管理 </a> </li> 
      </ul> 
    </div> 
    <div class="unit"> 
      <h5>新闻管理 </h5> 
      <ul> 
      <li> <a href="#">新闻管理 </a> </li> 
      <li> <a href="#">新闻管理 </a> </li> 
      <li> <a href="#">新闻管理 </a> </li> 
      <li> <a href="#">新闻管理 </a> </li> 
      </ul> 
    </div> 
    </div> 
    </body> 
    </html> 
    <script type="text/javascript"> 
    function init(){ 
    if(!document.getElementById || !document.getElementsByTagName){retun;} 
    var arrayDiv=document.getElementById("levelmenu"); 
    if(!arrayDiv){return;} 
    var divObj=arrayDiv.getElementsByTagName("div");   //得到 id="levelmenu" div 里面包含的所有的div ,返回一个数组
    var length=divObj.length;   //得到数组的长度
    var agreeDiv=new Array(); 
    for(var i=0;i <length;i++){ 
      if(divObj[i].className.indexOf("unit")>=0){  //如果div的样式中包含 "unit", 就把这个div 放到数组中,并且赋一个onclick 事件,当单击这个div时就执行showCurrentMenu函数
      agreeDiv.push(divObj[i]); 
      divObj[i].onclick=function(event){ 
        showCurrentMenu(agreeDiv,this,event); 
      } 
      } 


    //当单击某个div时
    function showCurrentMenu(agreeDiv,currentObj,event){ 
    if(!event)
    {
     event=window.event;

    //得到你单击的那个对象 下面为了兼容firefox.
    var eventObj=event.srcElement?event.srcElement:event.target; 
    var length=agreeDiv.length; 
    for(var i=0;i <length;i++){ 
    //把除了刚单击的div 之外的其它的3个div 设定为隐藏  
      if(eventObj.parentNode==agreeDiv[i] || eventObj.nodeName!="H5")
      {
       continue;
      }
      agreeDiv[i].className="unit current"; 

    //如果单击的是div里面的 H5标签 设定刚单击的这个div 是隐藏还是显示
    if(eventObj.nodeName=="H5"){ 
      if(eventObj.parentNode.className=="unit"){ 
       eventObj.parentNode.className="unit current"  //如果当前单击的这个div是隐藏的,设定div的样式为 "unit current"  也就是显示
      }else{ 
       eventObj.parentNode.className="unit" //如果当前单击的这个div是显示的,设定div的样式为 "unit"  也就是隐藏
      } 


    init();  //首先执行这个方法,进行初始化
    </script>可以看出来它是通过 改变 div 的样式来实现的.
    lz  看一下它的css 的定义吧
      

  3.   

    刚才写错了一个地方for(var i=0;i <length;i++){ 
            //把除了刚单击的div 之外的其它的3个div 设定为隐藏     
          if(eventObj.parentNode==agreeDiv[i] || eventObj.nodeName!="H5")
          {
              continue;
          }
          agreeDiv[i].className="unit current";  //改为unit    } 
      

  4.   


    点击后的暗色图片在那里修改:  主要是它在 css中写了这句 #levelmenu div.current h5{background-position:left bottom;}  来实现的
     
      

  5.   

    background-position 属性设置背景图像的起始位置。