简体   繁体   English

使用对象(JavaScript或jQuery)填充选择下拉列表

[英]Populate select drop-down using object (JavaScript or jQuery)

I'm trying to populate the options of a select drop-down using jQuery, and I've been partially successful, except for one of extra that I would like to add to it. 我正在尝试使用jQuery填充选择下拉列表的选项,除了获得我想要添加的其他功能之一之外,我已经取得了部分成功。

This is the object: 这是对象:

var test =[  
   {  
      "Issue":[  
         "A producers",
         "A producers",
         "H producers",
         "I producers",
         "Limited resource producers",
         "Organic producers",
         "Producers MM",
         "Producers MM"
      ],
      "Activity Type":[  
         "Career Fairs",
         "Career Fairs",
         "Outreach",
         "Targeted States Programs",
         "Partnership Programs",
         "Education",
         "Career Fairs",
         "Targeted States Programs"
      ],
      "Minority Serving Institute":[  
         "A",
         "DD",
         "B",
         "HSI",
         "DD",
         "A",
         "HSI",
         "B"
      ],
      "Leading Office":[  
         "DAIS",
         "RMED",
         "RMSD",
         "RMSD",
         "DAIS",
         "RMSD",
         "RMED",
         "RMED"
      ],
      "Location":[  
         "AAAAA",
         "TEST",
         "DFDFFF",
         "MIAMI",
         "45tw45t ",
         "EEEEEEE",
         "NEW ORLEANS",
         "RTRTRTR"
      ],
      "State":[  
         "Alaska",
         "Alaska",
         "Arizona",
         "Florida",
         "Alaska",
         "Kentucky",
         "Louisiana",
         "Iowa"
      ]
   }
];

To populate the options I use: 要填充我使用的选项:

var prev;
for (var key in test) {
var obj = test[key];
for (var w in obj) {
var obj2 = obj[w];

for (var z in obj2) {
  var obj3 = obj2[z];


  if (prev != obj3) {
    prev = obj3;
    $('.filter').append($("<option />").val(obj3).text(obj3));

  }

}

 }}

This is my question: How can I add to my drop down options groups adding "Issues", "Activity Type"... etc.,and under each option group its respective properties? 这是我的问题:如何在下拉选项组中添加“问题”,“活动类型” ...等,并在每个选项组下分别添加各自的属性?

Fiddle here 在这里摆弄

Thanks in advance. 提前致谢。

Just use w (eg 'Issues') to add a <optgroup> element and use that label to add the options to the correct group. 只需使用w (例如“问题”)添加<optgroup>元素,然后使用该标签将选项添加到正确的组即可。

 var test = [{ "Issue": ["A producers", "A producers", "H producers", "I producers", "Limited resource producers", "Organic producers", "Producers MM", "Producers MM"], "Activity Type": ["Career Fairs", "Career Fairs", "Outreach", "Targeted States Programs", "Partnership Programs", "Education", "Career Fairs", "Targeted States Programs"], "Minority Serving Institute": ["A", "DD", "B", "HSI","DD", "A", "HSI", "B"], "Leading Office": ["DAIS", "RMED", "RMSD", "RMSD", "DAIS", "RMSD", "RMED", "RMED"], "Location": ["AAAAA", "TEST", "DFDFFF", "MIAMI", "45tw45t ", "EEEEEEE", "NEW ORLEANS", "RTRTRTR"], "State": ["Alaska", "Alaska", "Arizona", "Florida", "Alaska", "Kentucky", "Louisiana", "Iowa"] }]; for (var key in test) { var obj = test[key]; for (var w in obj) { var obj2 = obj[w]; $('.filter').append($("<optgroup />").attr({'label': w})); for (var z in [...new Set(obj2)]) { var obj3 = obj2[z]; $('.filter optgroup[label="'+w+'"]').append($("<option />").val(obj3).text(obj3)); } } } 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <select class="filter"></select> 

You can use the optgroup tag. 您可以使用optgroup标签。

const filterElement = $('.filter')[0]; // just for me to get the DOM element
test.forEach(function(list) { // loop through the array
  for (let key in list) {
    let optGroup = document.createElement('optgroup');
    optGroup.setAttribute('label', key); // set the label so that it displays properly
    list[key].forEach(function(value) {
      let option = document.createElement('option');
      option.textContent = value;
      optGroup.appendChild(option); // add option to group
    });

    filterElement.appendChild(optGroup); // add group to select box
  }
});

Working fiddle: https://jsfiddle.net/2gfhv4w8/10/ 工作提琴: https : //jsfiddle.net/2gfhv4w8/10/

 var test = [{ "Issue": ["A producers", "A producers", "H producers", "I producers", "Limited resource producers", "Organic producers", "Producers MM", "Producers MM"], "Activity Type": ["Career Fairs", "Career Fairs", "Outreach", "Targeted States Programs", "Partnership Programs", "Education", "Career Fairs", "Targeted States Programs"], "Minority Serving Institute": ["A", "DD", "B", "HSI", "DD", "A", "HSI", "B"], "Leading Office": ["DAIS", "RMED", "RMSD", "RMSD", "DAIS", "RMSD", "RMED", "RMED"], "Location": ["AAAAA", "TEST", "DFDFFF", "MIAMI", "45tw45t ", "EEEEEEE", "NEW ORLEANS", "RTRTRTR"], "State": ["Alaska", "Alaska", "Arizona", "Florida", "Alaska", "Kentucky", "Louisiana", "Iowa"] }]; const filterElement = document.getElementById('filter'); test.forEach(function(list) { for (let key in list) { let optGroup = document.createElement('optgroup'); optGroup.setAttribute('label', key); list[key].forEach(function(value) { let option = document.createElement('option'); option.textContent = value; optGroup.appendChild(option); // add option to group }); filterElement.appendChild(optGroup); // add group to select box } }); 
 <select id="filter"></select> 

 var test = [{ "Issue": ["A producers", "A producers", "H producers", "I producers", "Limited resource producers", "Organic producers", "Producers MM", "Producers MM"], "Activity Type": ["Career Fairs", "Career Fairs", "Outreach", "Targeted States Programs", "Partnership Programs", "Education", "Career Fairs", "Targeted States Programs"], "Minority Serving Institute": ["A", "DD", "B", "HSI","DD", "A", "HSI", "B"], "Leading Office": ["DAIS", "RMED", "RMSD", "RMSD", "DAIS", "RMSD", "RMED", "RMED"], "Location": ["AAAAA", "TEST", "DFDFFF", "MIAMI", "45tw45t ", "EEEEEEE", "NEW ORLEANS", "RTRTRTR"], "State": ["Alaska", "Alaska", "Arizona", "Florida", "Alaska", "Kentucky", "Louisiana", "Iowa"] }]; var prev; cat = ''; result = ''; for (var key in test) { var obj = test[key]; for (var w in obj) { var obj2 = obj[w]; if (!cat) { result+='<optgroup label="' + w +'">'; cat = w; } if ( cat != w) { result+='</optgroup><optgroup label="' + w +'">'; cat = w; } for (var z in obj2) { var obj3 = obj2[z]; if (prev != obj3) { prev = obj3; result+='<option value="'+obj3+'">'+obj3+'</option>'; } } } } result+='</optgroup>'; $('.filter').append(result); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js"></script> <select class="filter"> </select> 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM