填充 Select 列表,包括 OptGroup

Populating Select List including OptGroup

我正在用一组数据填充一个 select 列表。像这样:

$(somedata).each(function() {
    $(document.createElement('option'))
        .attr('value', this.Value)
        .text(this.Text)
        .appendTo(SelectList);
});

如何以同样的方式追加 optgroups?数据数组是一个列表,其中包含属性 Text、Value、OptGroup(布尔值)并且已排序,因此 OptGroup 首先出现,然后是它的选项。像这样:

[
    ['OptGroup1', 'OptGroup1', true]
    ['Value1', 'Value1', false]
    ['Value2','Value2',false]
    ['OptGroup2', 'OptGroup2', true]
    // ...
]

答案非常简单 - 检查第三个值是真还是假,并相应地创建适当的元素。

不过有几点:

  • 选项组附加到 select,而选项需要附加到您添加的最后一个选项组。 optgroup 是选项的容器,而不是选项之前的标题。
  • optgroup 上的文本由 label="" 属性设置,而不是 value/text。

$(function () {
    var somedata = [
        ['OptGroup1', 'OptGroup1', true],
        ['Value1', 'Value1', false],
        ['Value2', 'Value2', false],
        ['OptGroup2', 'OptGroup2', true],
        ['Value3', 'Value3', false],
        ['Value4', 'Value4', false]
    ];
    console.log(somedata);
    var SelectList = $("#SelectList");
    $(somedata).each(function () {
        var $newElem;
        if ($(this)[2] == false) {
            $newElem = $(document.createElement('option')).attr('value', this[1])
            .attr('label', this[0])
            .appendTo(SelectList.find("optgroup").last());
        } else {
            $newElem = $(document.createElement('optgroup')).attr('value', this[1])
            .attr('label', this[0])
            .appendTo(SelectList);;
        }

    });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select id="SelectList"></select>