使用jQuery从JavaScript对象向<select>添加选项的最佳方法是什么?
我正在寻找一些不需要插件的东西,但我也会对现有的插件感兴趣。
这是我所做的:
selectValues = { "1": "test 1", "2": "test 2" };
for (key in selectValues) {
if (typeof (selectValues[key] == 'string') {
$('#mySelect').append('<option value="' + key + '">' + selectValues[key] + '</option>');
}
}
干净/简单的解决方案:
这是matdumsa的清理和简化版本:
$.each(selectValues, function(key, value) {
$('#mySelect')
.append($('<option>', { value : key })
.text(value));
});
matdumsa的更改:(1)删除了append()内选项的close标记,(2)将财产/属性作为append)的第二个参数移动到映射中。
由于JQuery的append可以将数组作为参数,所以我很惊讶没有人建议将其与map一起使用
$('#the_select').append(['a','b','c'].map(x => $('<option>').text(x)));
或减少
['a','b','c'].reduce((s,x) => s.append($('<option>').text(x)), $('#the_select'));
由于JQuery的append可以将数组作为参数,所以我很惊讶没有人建议将其与map一起使用
$('#the_select').append(['a','b','c'].map(x => $('<option>').text(x)));
或减少
['a','b','c'].reduce((s,x) => s.append($('<option>').text(x)), $('#the_select'));
我做了类似的事情,通过Ajax加载一个下拉项。上面的响应也是可以接受的,但是为了更好的性能,尽可能少地修改DOM总是很好的。
因此,与其在循环中添加每个项目,不如在循环中收集项目,并在完成后将其追加。
$(data).each(function(){
... Collect items
})
附加它,
$('#select_id').append(items);
甚至更好
$('#select_id').html(items);