Heim > Web-Frontend > js-Tutorial > jquery 无限级下拉菜单的简单实现代码_jquery

jquery 无限级下拉菜单的简单实现代码_jquery

WBOY
Freigeben: 2016-05-16 16:59:09
Original
950 Leute haben es durchsucht

本例子使用json数据,拼接ul和li来实现的
效果图:




1.准备json数据:

复制代码 代码如下:

var menuData = [
            {id:0,pid:-1,name:"订购产品",url:"",children:[
                {id:1,pid:0,name:"电脑配件",url:"http://www.jb51.net",children:[
                    {id:20,pid:1,name:"cpu",url:"http://www.jb51.net",children:[
                        {id:30,pid:20,name:"Intel",url:"http://www.jb51.net",children:[
                            {id:3000,pid:30,name:"Intel 01",url:""},
                            {id:3001,pid:30,name:"Intel 02",url:""},
                            {id:3002,pid:30,name:"Intel 03",url:""},
                            {id:3003,pid:30,name:"Intel 04",url:""},
                            {id:3004,pid:30,name:"Intel 05",url:""},
                            {id:3005,pid:30,name:"Intel 06",url:""},
                            {id:3006,pid:30,name:"Intel 07",url:""},
                            {id:3007,pid:30,name:"Intel 08",url:""},
                            {id:3008,pid:30,name:"Intel 09",url:""}
                        ]},
                        {id:31,pid:20,name:"AMD",url:"http://www.jb51.net",children:[
                            {id:3100,pid:31,name:"AMD 01",url:""},
                            {id:3101,pid:31,name:"AMD 02",url:""},
                            {id:3102,pid:31,name:"AMD 03",url:""},
                            {id:3103,pid:31,name:"AMD 04",url:""},
                            {id:3104,pid:31,name:"AMD 05",url:""},
                            {id:3105,pid:31,name:"AMD 06",url:""},
                            {id:3106,pid:31,name:"AMD 07",url:""},
                            {id:3107,pid:31,name:"AMD 08",url:""},
                            {id:3108,pid:31,name:"AMD 09",url:""}
                        ]}
                    ]},
                    {id:21,pid:1,name:"内存",url:"http://www.jb51.net"},
                    {id:22,pid:1,name:"硬盘",url:"http://www.jb51.net"},
                    {id:23,pid:1,name:"主板",url:"http://www.jb51.net"},
                    {id:24,pid:1,name:"显卡",url:"http://www.jb51.net"},
                    {id:25,pid:1,name:"显示器",url:"http://www.jb51.net"},
                    {id:26,pid:1,name:"主机箱",url:"http://www.jb51.net"},
                    {id:27,pid:1,name:"主机箱电源",url:"http://www.jb51.net"},
                    {id:28,pid:1,name:"键鼠(有线)",url:"http://www.jb51.net"},
                    {id:29,pid:1,name:"键鼠(无线)",url:"http://www.jb51.net"}
                ],url:"http://www.jb51.net"},
                {id:101,pid:0,name:"监控器材",children:[
                    {id:102,pid:101,name:"摄像头",url:"http://www.jb51.net"},
                    {id:103,pid:101,name:"摄像头",url:"http://www.jb51.net"},
                    {id:104,pid:101,name:"摄像头",url:"http://www.jb51.net"},
                    {id:112,pid:101,name:"摄像头",url:"http://www.jb51.net"},
                    {id:113,pid:101,name:"摄像头",url:"http://www.jb51.net"},
                    {id:114,pid:101,name:"摄像头",url:"http://www.jb51.net"},
                    {id:115,pid:101,name:"摄像头",url:"http://www.jb51.net"},
                    {id:116,pid:101,name:"摄像头",url:"http://www.jb51.net"},
                    {id:117,pid:101,name:"摄像头",url:"http://www.jb51.net"}
                ],url:"http://www.jb51.net"},
                {id:201,pid:0,name:"数码产品",children:[
                    {id:202,pid:201,name:"摄像头",url:"http://www.jb51.net"}
                ],url:"http://www.jb51.net"},
                {id:301,pid:0,name:"网络产品",children:[
                    {id:302,pid:301,name:"摄像头",url:"http://www.jb51.net"}
                ],url:"http://www.jb51.net"},
                {id:401,pid:0,name:"打印耗材",children:[
                    {id:402,pid:401,name:"打印机",url:"http://www.jb51.net"},
                    {id:403,pid:401,name:"油墨",url:"http://www.jb51.net"},
                    {id:404,pid:401,name:"纸张",url:"http://www.jb51.net"},
                    {id:405,pid:401,name:"摄像头",url:"http://www.jb51.net"},
                    {id:406,pid:401,name:"摄像头",url:"http://www.jb51.net"},
                    {id:407,pid:401,name:"摄像头",url:"http://www.jb51.net"},
                    {id:408,pid:401,name:"摄像头",url:"http://www.jb51.net"}
                ],url:"http://www.jb51.net"}
            ]},
            {id:1000,pid:-1,name:"我的订单",url:"",children:[
                {id:1001,pid:1000,name:"已过期订单",url:""},
                {id:1001,pid:1000,name:"已付款订单",url:""}
            ]},
            {id:2000,pid:-1,name:"公司信息",url:"",children:[
                {id:2001,pid:2000,name:"最新新闻",url:""},
                {id:2002,pid:2000,name:"公司地址",url:""}
            ]}
        ];

2.html代码:
复制代码 代码如下:



3.解析json数据(plugin-menu.js文件):刚学会写jquery插件,写的还比较乱,凑合着看吧
复制代码 代码如下:

(function($){
    $.fn.extend({
        menu:function(options){
            var defaults = {
                data:[],
                ulId:"baseMenu"
            };
            var options = $.extend(defaults, options);
            // 开始拼接ul,li
            $.each(options.data,function(i,v){
                var li = $("
  • ");
                    var _a = $(""+options.data[i].name+"");
                    _a.attr("href",options.data[i].url)
                        .appendTo(li);

                    _each(options.data[i],li);
                    li.appendTo($("#"+options.ulId));
                });
                // 给li添加事件
                $(this).find("li").hover(function(){
                    var id = $(this).attr("id");
                    $(this).find("ul[name='"+id+"']").show();
                },function(){
                    var id = $(this).attr("id");
                    $(this).find("ul[name='"+id+"']").hide();
                });
            }
        });
    })(jQuery);

  • 因为支持无限级,所以肯定会用到递归方法:
    复制代码 代码如下:

    function _each(data,li){
        if(data==undefined||data.children==undefined){
            return false;
        }
        var ul = $("
      ");

          $.each(data.children,function(i,v){
              var _li = $("
    • ");
              var _a = $(""+data.children[i].name+"");
              _a.attr("href",data.children[i].url)
                  .attr("target","_blank")
                  .appendTo(_li);

              if(data.children[i].children!=undefined){
                  _each(data.children[i],_li);
              }
              _li.appendTo(ul);
          });
          ul.appendTo(li);
      }

    • 4.调用插件:
      复制代码 代码如下:

      $(function() {
          $("#menu").menu({data:menuData,ulId:"baseMenu"});
      });

      最后,css样式:
      复制代码 代码如下:

      ul,li{list-style:none;padding:0px;margin:0px;}
      #menu *{line-height:30px;}
      #menu a{text-decoration:none;}
      #menu ul{text-align:left;}
      #menu>ul>li{text-align:center;width:80px;float:left;}
      #menu>ul>li>a{color:#000;}
      #menu>ul>li:hover{background:#F0F0F0;}
      #menu>ul>li ul{display:none;width:150px;position:absolute;background:#c1cd94;box-shadow:2px 2px 2px #000;-webkit-box-shadow:2px 2px 2px #000;
        -moz-box-shadow:2px 2px 2px #123;}
      #menu>ul>li>ul li{padding-left:5px; position:relative;}
      #menu>ul>li>ul li>a{color:#000;}
      #menu>ul>li>ul li:hover{background:#d3dbb3;}
      #menu>ul>li>ul>li ul{left:150px; top:0px;}
      Verwandte Etiketten:
      Quelle:php.cn
      Erklärung dieser Website
      Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
      Beliebte Tutorials
      Mehr>
      Neueste Downloads
      Mehr>
      Web-Effekte
      Quellcode der Website
      Website-Materialien
      Frontend-Vorlage