使用核心jQuery,如何删除一个选择框的所有选项,然后添加一个选项并选择它?

我的选择框如下。

<Select id="mySelect" size="9"> </Select>

编辑:下面的代码有助于链接。但是,(在Internet Explorer中).val('whatever')没有选择添加的选项。(我确实在.append和.val中使用了相同的“value”。)

$('#mySelect').find('option').remove().end()
.append('<option value="whatever">text</option>').val('whatever');

编辑:试图让它模仿这段代码,每当页面/表单重置时,我使用以下代码。这个选择框由一组单选按钮填充。.focus()更接近,但该选项没有像.selected= "true"那样显示为已选中。我现有的代码没有问题-我只是想学习jQuery。

var mySelect = document.getElementById('mySelect');
mySelect.options.length = 0;
mySelect.options[0] = new Option ("Foo (only choice)", "Foo");
mySelect.options[0].selected="true";

编辑:所选的答案接近我所需要的。这招对我很管用:

$('#mySelect').children().remove().end()
.append('<option selected value="whatever">text</option>') ;

但这两个答案都让我找到了最终的解决方案。


当前回答

我在IE7中有一个bug(在IE6中工作良好),其中使用上述jQuery方法将清除DOM中的选择,但不是在屏幕上。使用IE开发人员工具栏,我可以确认选择项已经被清除,并且有了新项,但从视觉上看,选择项仍然显示旧的项——即使你不能选择它们。

修复方法是使用标准的DOM方法/属性(如海报原始)来清除,而不是使用jQuery -仍然使用jQuery添加选项。

$('#mySelect')[0].options.length = 0;

其他回答

为什么不直接使用javascript呢?

document.getElementById("selectID").options.length = 0;

另一种方法:

$('#select').empty().append($('<option>').text('---------').attr('value',''));

在这个链接下,有一些好的实践https://api.jquery.com/select/

保存要追加到对象中的选项值 清除select标记中的现有选项 迭代列表对象并将内容附加到预期的选择标记

var listToAppend ={":'选择车辆','mc': '摩托车',' tr': '三轮车'}; $ (' # selectID ')空虚(); 美元。每个(listToAppend,函数(val,文本){ $ (" # selectID”)。追加(新选项(文本,val)); }); < script src = " https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js " > < /脚本>

把html改成新数据怎么样?

$('#mySelect').html('<option value="whatever">text</option>');

另一个例子:

$('#mySelect').html('
    <option value="1" selected>text1</option>
    <option value="2">text2</option>
    <option value="3" disabled>text3</option>
');

我在Select2 -中看到这段代码 清除选择

$('#mySelect').val(null).trigger('change');

即使没有Select2,这段代码也可以很好地使用jQuery