如何使用jQuery交换选择字段中的所有选项

如何使用jQuery交换选择字段中的所有选项,jquery,jquery-mobile,Jquery,Jquery Mobile,我在表单中有两个选择字段-make和model。我的目标是在选择其他品牌时更改field model的选项。例如,选择BMW,显示所有BMW车型 因此,我正在执行一个ajax调用来检索这些值,然后我想构建另一个表单 用于构建选项的代码: obj = JSON.parse(json); $.each(obj.item, function(key,valueObj){ Object.keys(valueObj || {}).forEach(function(k) { $('#filt

我在表单中有两个选择字段-make和model。我的目标是在选择其他品牌时更改field model的选项。例如,选择BMW,显示所有BMW车型

因此,我正在执行一个ajax调用来检索这些值,然后我想构建另一个表单

用于构建选项的代码:

obj = JSON.parse(json);
$.each(obj.item, function(key,valueObj){
    Object.keys(valueObj || {}).forEach(function(k) {
    $('#filter_model').append(
            $('<option></option>').val(k).html(valueObj[k])
    );
})
这通过附加新选项来实现。但当然,随着我不断改变品牌,它只会向选择的字段添加新的模型。我要么需要删除所有现有的,要么以某种方式重建整个字段。后一个是我的首选,因为我以后只想在选择make时显示model字段


这怎么可能实现呢

在循环中追加不是一个好主意,因为这是一个昂贵的操作。相反,您可以在循环中构建一个HTML字符串,然后使用.HTML方法将其设置为filter_模型的内容,从而只修改DOM一次:

obj = JSON.parse(json);
var strHTML = "";
$.each(obj.item, function(key,valueObj) {
    Object.keys(valueObj || {}).forEach(function(k) {
      strHTML += '<option value="' + k +'">' + valueObj[k] +'</option>';
    });
});

$('#filter_model').html(strHTML);

听起来你只需要调用$'filter_model'。在附加新选项的循环之前清空谢谢!这通过一些附加内容修复了它:$'filter\u model'.empty;$'筛选器_model'.附加'Auswählen';$'筛选“模型”。选择菜单刷新,为真;您正在将jQuery对象连接到loop@charlietfl谢谢,我相信我现在已经解决了这个问题。我还可以将对象数组传递给html@charlietfl哦,我不知道你能这么做。感谢您通知我:@NickParsons回答得很好,直到现在我才意识到.html也在像.empty一样清除数据和事件处理程序!我认为这需要在你的回答中强调。
obj = JSON.parse(json);
var options = [];
$.each(obj.item, function(key,valueObj) {
    Object.keys(valueObj || {}).forEach(function(k) {
      options.push($('<option></option>').val(k).html(valueObj[k]));
    });
});

$('#filter_model').html(options);