本帖最后由 ayayad 于 2013-02-21 19:04:32 编辑

解决方案 »

  1.   

    我写的话大约象这样{
      "菜单1":"值1",//typfOf =="string"
        "sep_x":"",
        "菜单2":{
             "菜单2_1":"值2_1",
             "sep_2_1":"",
             "菜单2_2":{
               ...
              }
        }
        }
      

  2.   

    忘记中文问题了{
      "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);
              }
        }
    }大约如此
      

  3.   

     item[label]改成  item.label
      

  4.   

    你的回答貌似并没有解决多条分隔线不能重复的问题,而且还更复杂了,也许是我没完全理解你的意思。
    不过真得感谢你,从你的代码里我受到了启发,下面看看我修改后的{
      {label:"一级菜单1",value:{{label:"二级菜单1",value:null},{label:"二级菜单2",value:null}}},
        {label:"",value:null},
        {label:"一级菜单2",value:null},
        {label:"",value:null},
        {label:"一级菜单3",value:null}
     }我再等两天结贴  看下有没有更好的回答  我会给你分的
      

  5.   


    [
        {
            txt :'菜单1' ,
            value : '1' ,
            children : [
                            {
                                txt :'菜单12' ,
                                value : '12' 
                            },'-',/*if(typeof xxx=='string' && xxx=='-'){这个是分隔线} */
                            {
                                txt :'菜单13' ,
                                value : '13' ,
                                children : [
                                                {
                                                    txt :'菜单112' ,
                                                    value : '112' 
                                                },'-',/*if(typeof xxx=='string' && xxx=='-'){这个是分隔线} */{
                                                    txt :'菜单122' ,
                                                    value : '122' 
                                                }
                                            ]
                            }
                        ] 
        },
        {
            txt :'菜单2' ,
            value : '2' ,
            children : [
                            {
                                txt :'菜单22' ,
                                value : '22' 
                            },
                            {
                                txt :'菜单23' ,
                                value : '23' ,
                                children : [
                                                {
                                                    txt :'423424' ,
                                                    value : '12341234' 
                                                },{
                                                    txt :'24124' ,
                                                    value : '41243' 
                                                }
                                            ]
                            }
                        ] 
        }
    ]
      

  6.   

    多条分隔线不能重复的问题??
    原来的想法是有点晕,的确应当是用数组来实现。当然还是建议value与sonsItems分成两个不同的属性名。{menu:[
        {label:"",value:""},
        {label:"",sons:[
             {label:"",value""},
             ...
         ]}]
    }
      

  7.   

    这个不错哦  格式很规范  解析起来也方便  我就先用你这个啦另外问一下,我看你们属性中都要加个value属性  我知道这是用来  判断选中值的  就像option中的value
    但这一定要加吗  txt中虽然有中文符号这些  也并不影响判断啊
    加value只是一个约定俗成的习惯呢   还是不用value会有什么bug
      

  8.   

    value只是一个约定俗成的习惯,代码不只是给机器看的,也是给人看的。所以定义变量名最好直接能说明这是什么东西。