日期:2014-05-16  浏览次数:20428 次

js函数传入多级菜单项 大家参谋下
本帖最后由 ayayad 于 2013-02-21 19:04:32 编辑
我做了个右键菜单,样子和功能就和一般的右键菜单一样。
但我写的时候菜单的html代码都是直接手写的,现在我想让js自动生成,这样就不要每次用到时都去手写html代码了,方便复用。
当然我这里不是问怎么写入,我是想问怎么将菜单的选项传入js函数比较好。
要求:
1.这个是无限多级菜单,即每一个菜单项多可能有子菜单,然后子菜单还可以有子菜单;
2.菜单中菜单项与菜单项间可能有分割线。
下面是我写的一个传参:
{"一级菜单项1":{},"":{},"一级菜单项2":{"二级菜单项1":{},"二级菜单项2":{}},"":{},"一级菜单项3":{}}
我来说明下:这是一个键值对,键为菜单项的值,值为其下级菜单,如果值为{}就是没有下级菜单,键为""就表示这是一条分隔线,可以说这基本上已经完成了传参,但这里有个问题,键值对的键值不能重复,我这里有两个""键,在读取是就变成了一个,也就是说一级菜单项2和一级菜单项3之间的分割线没了,这样的话我也就只有把分隔线的键写成不同的(比如sep_数字),那就必须用代码里再去判断是不是以sep为前缀(好麻烦),而且如果有以sep_开头的菜单项我就不得不去改我的代码了。

嘿嘿写的有点多,我想我的意思都表达清楚了吧,大家帮我想想吧,觉得能在我的基础上改的就改改,你有更好的方法的那就更好了。

麻烦大家了,分肯定给你们的,大家踊跃发表意见
javascript jquery 参数 html 函数

------解决方案--------------------
忘记中文问题了

{
  "menu1":{label:"菜单1",value:"key1"},
    "sep_x":"",
    "menu2":{label:"菜单2",
         "menu2_1":{label:"菜单2_1",value:"key2_1"},
         "sep_2_1":"",
         "menu2_2":{label:"菜单2_2",
              "menu2_2_1":{label:"菜单2_2_1",value:"key_2_2_1"}
          }
    }   
 }
funciton showMenu(item){
    if("value" in item){
          //无下级菜单
    }else if(typeOf item =="string"){
          //分隔线
    }else {
          var label= item[label];
          //处理本级菜单
          delete item[label];
          for(var key in item){
              showMenu(item[key],tag);
          }
    }
}



大约如此
------解决方案--------------------

[
    {
        txt :'菜单1' ,
        value : '1' ,
        children : [
                        {
                            txt :'菜单12' ,
                            value : '12' 
                        },'-',/*if(typeof xxx=='string' && xxx=='-'){这个是分隔线} */