我得到一个像
[{"Childid":17,"ChildName":"A","Parentid":81,"ParentName":"AA"},
{"Childid":2,"ChildName":"B","Parentid":81,"ParentName":"AA"},
{"Childid":6,"ChildName":"B","Parentid":82,"ParentName":"AB"},
{"Childid":5,"ChildName":"A","Parentid":82,"ParentName":"AB"}]
从这里我试图建立一个选择列表。但陷入了 optgroup 的情况。首先我试图从数组中找到所有唯一的父名。这将作为 opt 组。
var cnames = [];
$.each(data, function (index, value) {
if ($.inArray(value.ParentName, cnames) == -1) {
cnames.push(value.ParentName);
}
});
然后在两个数组中进行迭代并填充选项[子名和属性]。
$.each(cnames, function (index, value) {
var begin = index;
data = $.map(data, function (item, a) {
if (value == item.ParentName) {
return begin == index ? "<optgroup label='" + item.ParentName + "'><option value=" + item.Childid + ">" + item.ChildName + "</option>" : "<option value=" + item.Childid + ">" + item.ChildName + "</option>";
}
});
});
但我得到的输出像。
因为在循环之后开始总是= 0。我可以在一次调用中避免这些迭代吗?
更新:
做出改变
$.each(cnames, function (index, value) {
var begin = index;
data = $.map(data, function (item, a) {
if (value == item.ParentName) {
begin += 1;
return begin-1 == index ? "<optgroup label='" + item.ParentName + "'><option value=" + item.Childid + ">" + item.ChildName + "</option>" : "<option value=" + item.Childid + ">" + item.ChildName + "</option>";
}
});
});
但这不会关闭 optgroup 。