2012-05-18 115 views
0

我想用jQuery设计一个多级菜单。 我已经写了一些代码。你可以看到演示here。 所有这一切正常。但我想动态地制作多级下拉菜单。使用jquery的多级下拉菜单

脚本

$('ul#menu > li').hover(function(){ 
    //$('#drop' , this).css('display','block'); 
    $('.drop' , this).delay(20).slideDown(200); 
}, function(){ 
$('.drop' , this).delay(20).slideUp(200); 
});​ 

HTML

<ul id="menu"> 
    <li><a href="#">Home</a> 
     <ul class="drop"> 
      <li><a href="#">About us</a></li> 
      <li><a href="#">About us</a></li> 
      <li><a href="#">About us</a></li> 
      <li><a href="#">About us</a></li> 
     </ul> 
    </li> 


    <li><a href="#">about</a> 
     <ul class="drop"> 
      <li><a href="#">Home</a></li> 
      <li><a href="#">Home</a></li> 
      <li><a href="#">Home</a></li> 
      <li><a href="#">Home</a></li> 
     </ul> 
    </li> 

</ul>​ 

CSS

ul#menu 
{ 
    margin:0; 
    padding:0; 
} 
ul#menu > li 
{ 
    list-style:none; 
    float:left; 
    margin:0; 
    padding:0; 
    position:relative; 
} 
ul#menu a 
{ 
    text-decoration:none; 
    color:#fff; 
    background:red; 
    display:block; 
    padding:10px; 
} 
ul#menu > li ul.drop 
{ 
    margin:0; 
    padding:0; 
    width:150px; 
    position:absolute; 
    display:none; 
} 
ul#menu > li ul.drop ul 
{ 
    margin:0; 
    padding:0; 
    width:150px; 
    position:absolute; 
    display:none; 
    left:150px; 
    top:0; 
} 
ul#menu > li ul li 
{ 
    margin:0; 
    padding:0; 
    list-style:none; 
    position:relative; 
}​ 

回答

3

您需要更改jQuery脚本一点点,以适应多级菜单是这样的:

$('ul#menu li').hover(function(){ 
    $(this).children('ul').delay(20).slideDown(200); 
}, function(){ 
    $(this).children('ul').delay(20).slideUp(200); 
}); 

,并更改HTML这样的:

<ul id="menu"> 
    <li><a href="#">Home</a> 
     <ul class="drop"> 
      <li><a href="#">About us</a></li> 
      <li><a href="#">About us</a></li> 
      <li><a href="#">About us</a></li> 
      <li> 
       <a href="#">About us</a> 
       <ul> 
        <li><a href="#">Sub Item 1</a></li> 
        <li> 
         <a href="#">Sub Item 2</a> 
         <ul> 
          <li><a href="#">Sub item 3</a></li> 
          <li><a href="#">Sub item 4</a></li> 
         </ul> 
        </li> 
       </ul> 
      </li> 
     </ul> 
    </li> 


    <li><a href="#">about</a> 
     <ul class="drop"> 
      <li><a href="#">Home</a></li> 
      <li><a href="#">Home</a></li> 
      <li><a href="#">Home</a></li> 
      <li><a href="#">Home</a></li> 
     </ul> 
    </li> 
</ul> 

你的CSS是罚款。 您可以检查更新的多级代码:http://jsfiddle.net/297t6/

0
$(document).ready(function() { 
      var data = [{ 'Name': 'Home', 'Url': '#', 'SubMenu': [{ 'Name': 'Home1', 'Url': '#' }, { 'Name': 'Home2', 'Url': '#' }, { 'Name': 'Home3', 'Url': '#' }, { 'Name': 'Home4', 'Url': '#' }, ] }, { 'Name': 'AboutUs', 'Url': '#', 'SubMenu': [{ 'Name': 'AboutUs1', 'Url': '#' }, { 'Name': 'AboutUs2', 'Url': '#' }, { 'Name': 'AboutUs3', 'Url': '#' }, { 'Name': 'AboutUs4', 'Url': '#' }, ]}]; 

      if (data.length > 0) { 
       $('body').prepend('<ul id="menu"><ul>'); 

       $.each(data, function (i, entity) { 
        var liHtml = []; 
        liHtml.push('<li><a href="' + entity.Url + '">' + entity.Name + '</a>'); 
        if (entity.SubMenu.length > 0) { 
         liHtml.push('<ul class="drop">'); 
         $.each(entity.SubMenu, function (i, subEntity) { 
          liHtml.push('<li><a href="' + subEntity.Url + '">' + subEntity.Name + '</a>'); 
         }); 
         liHtml.push('</ul>'); 
        } 
        liHtml.push('</li>'); 

        $('ul#menu').append(liHtml.join('')); 
       }); 
      } 



      $('ul#menu > li').hover(function() { 
       //$('#drop' , this).css('display','block'); 
       $('.drop', this).delay(20).slideDown(200); 
      }, function() { 
       $('.drop', this).delay(20).slideUp(200); 
      }); 
     }); 

现场演示中看到此链接:http://jsfiddle.net/nanoquantumtech/Z5NXv/

+0

感谢,对上述解决方案。但是您的解决方案仅适用于2级菜单项。即父母和孩子。你能说我怎么能有无限级菜单? – Vishal