嵌套 json 和递归 $.Each()
Nested json, and recursive $.Each()
我有一个像这样的嵌套 JSON :
[{
"1": {
"name": "Mobile"
},
"5": {
"name": "Savings",
"childs": {
"27": {
"name": "Children"
}
}
},
"6": {
"name": "Pro Expenses"
},
"7": {
"name": "Salary",
"childs": {
"143": {
"name": "Salary Savings"
}
}
},
"8": {
"name": "Food",
"childs": {
"13": {
"name": "Lunch Food",
"childs": {
"53": {
"name": "Coffee"
}
}
},
"91": {
"name": "Canteen"
},
"93": {
"name": "Market"
}
}
}]
我想创建一个带有 optgroup 和选项的嵌套 select :
<SELECT>
<OPTION value="1">Mobile</OPTION>
<OPTGROUP name="Savings">
<OPTION value="27">Children</OPTION>
</OPTGROUP>
<OPTION value="6">Pro Expenses</OPTION>
<OPTGROUP name="Salary">
<OPTION value="143">Salary Savings</OPTION>
</OPTGROUP>
<OPTGROUP name="Food">
<OPTGROUP name="Lunch Food">
<OPTION value="53">Coffee</OPTION>
</OPTGROUP>
<OPTION value="91">Canteen</OPTION>
<OPTION value="93">Market</OPTION>
</OPTGROUP>
</SELECT>
我知道嵌套的 OPTGROUP 无效。但这不是重点,我想在这里讨论。 ;)
我下面的 Jquery 代码无法运行,因为每个代码的第三个参数不受支持。
$.getJSON("/?act=get_json_data",{data:'categories'}, function(json) {
var select = $('#categories');
$.each(json, function add_optgroup(k, item, parent=select) {
if (typeof(item.childs) !== 'undefined') {
var group = $('<optgroup>',{label:item.name});
$.each(item.childs, add_optgroup(ck, citem, group));
group.appendTo(parent);
} else {
$("<option/>",{value:k,text:item.name})
.appendTo(parent);
}
});
我尝试了很多解决方案,但由于“.appendTo()”,我需要父级,并且每个都不允许第三个参数。
欢迎任何帮助 ;)
使用另一个嵌套函数来弥合您想要的 3-arg 函数调用与内部 each
回调之间的差距:
$.each(item.childs, function(ck, citem) { add_optgroup(ck, citem, group) });
此函数从 each
获取 key/value 个参数,并添加它可以访问的第三个参数 group
作为封闭范围的一部分。
我有一个像这样的嵌套 JSON :
[{
"1": {
"name": "Mobile"
},
"5": {
"name": "Savings",
"childs": {
"27": {
"name": "Children"
}
}
},
"6": {
"name": "Pro Expenses"
},
"7": {
"name": "Salary",
"childs": {
"143": {
"name": "Salary Savings"
}
}
},
"8": {
"name": "Food",
"childs": {
"13": {
"name": "Lunch Food",
"childs": {
"53": {
"name": "Coffee"
}
}
},
"91": {
"name": "Canteen"
},
"93": {
"name": "Market"
}
}
}]
我想创建一个带有 optgroup 和选项的嵌套 select :
<SELECT>
<OPTION value="1">Mobile</OPTION>
<OPTGROUP name="Savings">
<OPTION value="27">Children</OPTION>
</OPTGROUP>
<OPTION value="6">Pro Expenses</OPTION>
<OPTGROUP name="Salary">
<OPTION value="143">Salary Savings</OPTION>
</OPTGROUP>
<OPTGROUP name="Food">
<OPTGROUP name="Lunch Food">
<OPTION value="53">Coffee</OPTION>
</OPTGROUP>
<OPTION value="91">Canteen</OPTION>
<OPTION value="93">Market</OPTION>
</OPTGROUP>
</SELECT>
我知道嵌套的 OPTGROUP 无效。但这不是重点,我想在这里讨论。 ;)
我下面的 Jquery 代码无法运行,因为每个代码的第三个参数不受支持。
$.getJSON("/?act=get_json_data",{data:'categories'}, function(json) {
var select = $('#categories');
$.each(json, function add_optgroup(k, item, parent=select) {
if (typeof(item.childs) !== 'undefined') {
var group = $('<optgroup>',{label:item.name});
$.each(item.childs, add_optgroup(ck, citem, group));
group.appendTo(parent);
} else {
$("<option/>",{value:k,text:item.name})
.appendTo(parent);
}
});
我尝试了很多解决方案,但由于“.appendTo()”,我需要父级,并且每个都不允许第三个参数。
欢迎任何帮助 ;)
使用另一个嵌套函数来弥合您想要的 3-arg 函数调用与内部 each
回调之间的差距:
$.each(item.childs, function(ck, citem) { add_optgroup(ck, citem, group) });
此函数从 each
获取 key/value 个参数,并添加它可以访问的第三个参数 group
作为封闭范围的一部分。