Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript json递归+;选择元素_Javascript_Recursion_Mootools - Fatal编程技术网

Javascript json递归+;选择元素

Javascript json递归+;选择元素,javascript,recursion,mootools,Javascript,Recursion,Mootools,如何使用json和mootools库填充select元素 我的JSON数据如下: var data = {"tree": [ {"id":1,"parent":0,"name":"Category A","subcategories":[]}, {"id":2,"parent":0,"name":"Category B","subc

如何使用json和mootools库填充select元素

我的JSON数据如下:

var data  = {"tree":
                        [
                             {"id":1,"parent":0,"name":"Category A","subcategories":[]},
                             {"id":2,"parent":0,"name":"Category B","subcategories":
                                    [
                                        {"id":6,"parent":2,"name":"Subcategory F","subcategories":[]},
                                        {"id":7,"parent":2,"name":"Subcategory G","subcategories":[]}
                                    ]
                             },
                             {"id":3,"parent":0,"name":"Category C","subcategories":
                                    [
                                        {"id":8,"parent":3,"name":"Subcategory H","subcategories":[]}
                                    ]
                             },
                             {"id":4,"parent":0,"name":"Category D","subcategories":
                                    [
                                        {"id":9,"parent":4,"name":"Subcategory I","subcategories":
                                            [
                                                {"id":10,"parent":9,"name":"Subcategory J","subcategories":[]}
                                            ]
                                        }
                                    ]
                            },{"id":5,"parent":0,"name":"Category E","subcategories":[]}
                        ]
                };   
如何获取此输出标记:

 <select>
       <option value="1">Category A</option>
       <option value="2">Category B</option>
       <option value="6">Category B->Subcategory F</option>
       <option value="7">Category B->Subcategory G</option>
       <option value="3">Category C</option>
       <option value="8">Category C->Subcategory H</option>
       <option value="4">Category D</option>
       <option value="9">Category D->Subcategory I</option>
       <option value="10">Category D->Subcategory I->Subcategory J</option>
       <option value="5">Category E</option>
    </select>

A类
B类
类别B->子类别F
类别B->子类别G
C类
C类->H子类
D类
D类->子类I
D类->子类I->子类J
E类
使用递归

代码:

var数据={“树”:
[
{“id”:1,“父级”:0,“名称”:“类别A”,“子类别”:[]},
{“id”:2,“父级”:0,“名称”:“类别B”,“子类别”:
[
{“id”:6,“父”:2,“名称”:“子类别F”,“子类别”:[]},
{“id”:7,“parent”:2,“name”:“Subcategory G”,“subcategories”:[]}
]
},
{“id”:3,“父级”:0,“名称”:“C类”,“子类”:
[
{“id”:8,“父”:3,“名称”:“子类别H”,“子类别”:[]}
]
},
{“id”:4,“父级”:0,“名称”:“类别D”,“子类别”:
[
{“id”:9,“父”:4,“名称”:“子类别I”,“子类别”:
[
{“id”:10,“parent”:9,“name”:“Subcategory J”,“subcategories”:[]}
]
}
]
},{“id”:5,“父级”:0,“名称”:“E类”,“子类”:[]}
]
};  
//创建select元素
var select=新元素(“select”);
//递归函数继续执行所有元素->子元素等。。。
函数递归数据(arr,父项名称前缀){
如果(!parent_name_prefix){parent_name_prefix=''';}
每个(功能(项目)对应{
var name=item.name;
变量字母=名称。拆分(“”)[1];
var值=getABNumber(字母);
var text=父项名称前缀+名称;
addSelectOption(文本、值);
var arr_sub=项目子类别;
递归数据(arr_sub,text+'->');
});
}
//添加要选择的选项
函数addSelectOption(文本、值){
select.options[select.options.length]=新选项(文本、值);
}
//根据字母得到numner的函数
函数getABNumber(val){
var base='ABCDEFGHIjklmnopqrstuvxyz',i,j,结果=0;
对于(i=0,j=val.length-1;i
为什么我否决了这个问题:更简单的解决方案没有getABNumber函数,只使用了我没有看到的'id'属性:)
var data  = {"tree":
                    [
                         {"id":1,"parent":0,"name":"Category A","subcategories":[]},
                         {"id":2,"parent":0,"name":"Category B","subcategories":
                                [
                                    {"id":6,"parent":2,"name":"Subcategory F","subcategories":[]},
                                    {"id":7,"parent":2,"name":"Subcategory G","subcategories":[]}
                                ]
                         },
                         {"id":3,"parent":0,"name":"Category C","subcategories":
                                [
                                    {"id":8,"parent":3,"name":"Subcategory H","subcategories":[]}
                                ]
                         },
                         {"id":4,"parent":0,"name":"Category D","subcategories":
                                [
                                    {"id":9,"parent":4,"name":"Subcategory I","subcategories":
                                        [
                                            {"id":10,"parent":9,"name":"Subcategory J","subcategories":[]}
                                        ]
                                    }
                                ]
                        },{"id":5,"parent":0,"name":"Category E","subcategories":[]}
                    ]
            };  
        //create the select element
        var select = new Element('select');

        //recurse function going on all the elements->sub-elements etc...
        function recurseData(arr,parent_name_prefix){
            if(!parent_name_prefix){parent_name_prefix = '';}
            arr.each(function(item){
                var name = item.name;
                var letter = name.split(' ')[1];
                var value = getABNumber(letter);

                var text = parent_name_prefix + name;
                addSelectOption(text,value);
                var arr_sub = item.subcategories;
                recurseData(arr_sub,text + ' -> ');
            });
        }

         //add option to select
        function addSelectOption(text,value){
            select.options[select.options.length] = new Option(text,value);
        }
        //function that get numner according to letter
        function getABNumber (val) {
          var base = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', i, j, result = 0;

          for (i = 0, j = val.length - 1; i < val.length; i += 1, j -= 1) {
            result += Math.pow(base.length, j) * (base.indexOf(val[i]) + 1);
          }

          return result;
        };

        //trigger all using the main arr
        recurseData(data.tree);

        //inject select to body
        select.inject(document.body);