Javascript 如何以编程方式将optgroup添加到select2

Javascript 如何以编程方式将optgroup添加到select2,javascript,select2,Javascript,Select2,我正在向预初始化的select2对象添加选项值,如下所示: function updateFilter() { var $element = $("#filter"); var counterOption = 0; Object.keys(genderMap).forEach(function (key) { if (key !== "null") { var $option = $("<option></opti

我正在向预初始化的select2对象添加选项值,如下所示:

function updateFilter() {
    var $element = $("#filter");
    var counterOption = 0;
    Object.keys(genderMap).forEach(function (key) {
        if (key !== "null") {
            var $option = $("<option></option>");
            $option.val(counterOption);
            $option.text(key);
            $element.append($option);
            counterOption = counterOption + 1;
        }
    });
    $element.trigger("change");
}
函数updateFilter(){
变量$element=$(“#过滤器”);
var counterOption=0;
Object.key(genderMap).forEach(function(key){
如果(键!=“空”){
var$选项=$(“”);
$option.val(反向期权);
$option.text(键);
$element.append($option);
反期权=反期权+1;
}
});
$element.trigger(“变更”);
}
我需要从其他字典中添加更多的值,因此我的目标是将来自不同映射的选项放在optgroup标记中,以帮助用户了解哪些值属于哪个组


我在SO中发现了一些东西,但所有这些答案都依赖于JSON。添加optgroup标签的正确方法是什么?

官方文档向您展示了如何使用插件的
数据
选项添加
标签

就你而言,我希望:

function updateFilter() {
    var $element = $("#filter");
    var counterOption = 0;

    // prepare your new data object
    var data = [
      {
        text: 'OptGroup 1: Gender',
        children: Object.keys(genderMap).filter(filterFn).map(mappingFn) // assuming global genderMap
      },
      {
        text: 'OptGroup 2: Age',
        children: Object.keys(ageMap).filter(filterFn).map(mappingFn) // assuming global ageMap
      },
      {
        text: 'OptGroup 3: Eye Color',
        children: Object.keys(eyeMap).filter(filterFn).map(mappingFn) // assuming global eyeMap
      }
    ];

    // filters 'null' keys
    function filterFn(key){
      return key !== 'null';
    }

    // transforms the array of keys into an array of {options}
    function mappingFn(key){
      var option = {id: counterOption.toString(), text: key};
      counterOption++;
      return option;      
    }    

    // re-initialize select2 with new data
    $element.select2("destroy"); // destroying may not be necessary
    $element.select2({
      data: data
    });
}

它可以很好地使用optgroup和options构建下拉列表,但是由于某些原因,我无法再选择它们。。。这真的很奇怪…@user299791我添加了一个
filterFn
来去除“null”键