当前位置:  编程技术>WEB前端

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

    来源: 互联网  发布时间:2014-08-25

    本文导语:  本例子使用json数据,拼接ul和li来实现的效果图:1.准备json数据: 代码如下:var menuData = [            {id:0,pid:-1,name:"订购产品",url:"",children:[                {id:1,pid:0,name:"电脑配件",url:"http://www.",children:[          ...

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




1.准备json数据:
代码如下:

var menuData = [
            {id:0,pid:-1,name:"订购产品",url:"",children:[
                {id:1,pid:0,name:"电脑配件",url:"http://www.",children:[
                    {id:20,pid:1,name:"cpu",url:"http://www.",children:[
                        {id:30,pid:20,name:"Intel",url:"http://www.",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.",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."},
                    {id:22,pid:1,name:"硬盘",url:"http://www."},
                    {id:23,pid:1,name:"主板",url:"http://www."},
                    {id:24,pid:1,name:"显卡",url:"http://www."},
                    {id:25,pid:1,name:"显示器",url:"http://www."},
                    {id:26,pid:1,name:"主机箱",url:"http://www."},
                    {id:27,pid:1,name:"主机箱电源",url:"http://www."},
                    {id:28,pid:1,name:"键鼠(有线)",url:"http://www."},
                    {id:29,pid:1,name:"键鼠(无线)",url:"http://www."}
                ],url:"http://www."},
                {id:101,pid:0,name:"监控器材",children:[
                    {id:102,pid:101,name:"摄像头",url:"http://www."},
                    {id:103,pid:101,name:"摄像头",url:"http://www."},
                    {id:104,pid:101,name:"摄像头",url:"http://www."},
                    {id:112,pid:101,name:"摄像头",url:"http://www."},
                    {id:113,pid:101,name:"摄像头",url:"http://www."},
                    {id:114,pid:101,name:"摄像头",url:"http://www."},
                    {id:115,pid:101,name:"摄像头",url:"http://www."},
                    {id:116,pid:101,name:"摄像头",url:"http://www."},
                    {id:117,pid:101,name:"摄像头",url:"http://www."}
                ],url:"http://www."},
                {id:201,pid:0,name:"数码产品",children:[
                    {id:202,pid:201,name:"摄像头",url:"http://www."}
                ],url:"http://www."},
                {id:301,pid:0,name:"网络产品",children:[
                    {id:302,pid:301,name:"摄像头",url:"http://www."}
                ],url:"http://www."},
                {id:401,pid:0,name:"打印耗材",children:[
                    {id:402,pid:401,name:"打印机",url:"http://www."},
                    {id:403,pid:401,name:"油墨",url:"http://www."},
                    {id:404,pid:401,name:"纸张",url:"http://www."},
                    {id:405,pid:401,name:"摄像头",url:"http://www."},
                    {id:406,pid:401,name:"摄像头",url:"http://www."},
                    {id:407,pid:401,name:"摄像头",url:"http://www."},
                    {id:408,pid:401,name:"摄像头",url:"http://www."}
                ],url:"http://www."}
            ]},
            {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;}

          
       
       

      您可能感兴趣的文章:

    • jQuery 下拉菜单插件 jQuery menu-aim
    • jQuery下拉菜单插件 jQuery Simple Drop Down Menu
    • jquery下拉菜单效果 jquery点击弹出下拉菜单的例子
    • jQuery联动下拉框 jQuery optionTree
    • jQuery下拉选择插件 MagicCombo
    • jquery iis7站长之家
    • jQuery下拉框插件 FlexBox
    • jQuery 下拉列表插件 Heapbox
    • jQuery 下拉框插件 Selectik
    • jQuery 下拉菜单插件 menu-aim
    • jQuery下拉组件 ddSlick
    • jQuery下拉列表插件 jQselectable
    • jQuery 下拉列表 Custom Drop
    • jQuery水平下拉菜单 jMenu
    • jQuery下拉框插件 mcDropdown
    • 巧用jquery解决下拉菜单被Div遮挡的相关问题
    • jQuery下拉菜单插件 jbar
    • jQuery自定义下拉列表 DropKick
    • jquery easyui自定义下拉框列表
    • jQuery操作select下拉框的text值和value值的方法
    • jQuery右键菜单插件 jQuery ContextMenu
    • jQuery上下文菜单插件 jquery-simple-context-menu
    • jQuery菜单插件 Dmenu jQuery Plugin
    • jQuery 菜单插件 jVanilla Menu
    • jQuery响应式侧栏菜单插件 sidr
    • jQuery树型菜单 MagicDTree
    • 抽屉式菜单 jQuery.mmenu
    • jQuery菜单插件 Superfish
    • jQuery卷帘菜单插件 HoverAccordion
    • 侧边栏菜单插件 jQuery SideBar Plugin
    • jQuery菜单插件 Smooth Navigational Menu
    •  
      本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
      本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












    • 相关文章推荐
    • 通过javascript库JQuery实现页面跳转功能代码
    • jquery代码-如何使用jQuery来解析xml
    • jQuery概述,代码举例及最新版下载
    • jquery代码-如何使用jQuery来检测右键和左键的鼠标单击两种情况
    • jQuery页面加载完毕再执行代码多种方法
    • jquery的父子兄弟节点查找示例代码
    • JQuery实现元素屏幕居中显示的代码
    • jQuery 代码模块化 TerrificJS
    • 在myeclipse中如何加入jquery代码提示功能
    • jquery弹窗代码示例
    • Jquery在指定DIV加载HTML示例代码
    • jquery遍历checkbox代码与说明
    • JQUERY 设置SELECT选中项代码
    • jQuery获得内容和属性示例代码
    • jQuery的each终止或跳过示例代码
    • jquery代码-如何使用多个属性来进行过滤
    • 简单的代码实现jquery定时器
    • jquery捕捉回车事件的代码
    • jQuery实现回车键(Enter)切换文本框焦点的代码实例
    • jquery实现图片路径不存在时进行替换的代码
    • jquery 页面滚动到指定DIV的代码
    • Jquery操作html复选框checkbox:全选,全不选和反选
    • jQuery鼠标动画插件 jquery-ahover
    • struts+spring+hibernate+jquery实现分页功能的几个基本类介绍(异步加载)
    • jQuery向导插件 Jquery Wizard Plugin
    • jQuery圆角插件 jQuery Corners
    • jQuery相册插件 jQuery.popeye
    • jQuery UI组件 jQuery UI
    • jQuery分页插件 Pagination jQuery Plugin
    • jQuery日历插件 jQuery Week Calendar
    • jQuery的中文日历插件 jQuery.datePickerCn


    • 站内导航:


      特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

      ©2012-2021,,E-mail:www_#163.com(请将#改为@)

      浙ICP备11055608号-3