1174

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

我的选择框如下。

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

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

$('#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>') ;

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

4

27 回答 27

1807
$('#mySelect')
    .find('option')
    .remove()
    .end()
    .append('<option value="whatever">text</option>')
    .val('whatever')
;
于 2008-09-06T21:01:36.750 回答
765
$('#mySelect')
    .empty()
    .append('<option selected="selected" value="whatever">text</option>')
;
于 2009-12-16T21:07:16.527 回答
149

为什么不只使用普通的javascript?

document.getElementById("selectID").options.length = 0;
于 2013-11-13T19:45:20.433 回答
93

如果您的目标是从选择中删除除第一个选项之外的所有选项(通常是“请选择一个项目”选项),您可以使用:

$('#mySelect').find('option:not(:first)').remove();
于 2013-03-27T09:56:28.187 回答
82

我在 IE7 中有一个错误(在 IE6 中工作正常),使用上述 jQuery 方法会清除 DOM 中的选择,但不会清除屏幕上的选择。使用 IE 开发工具栏,我可以确认选择已被清除并有新项目,但在视觉上,选择仍然显示旧项目 - 即使您无法选择它们。

解决方法是使用标准 DOM 方法/属性(如海报原件那样)来清除而不是 jQuery - 仍然使用 jQuery 添加选项。

$('#mySelect')[0].options.length = 0;
于 2010-01-11T09:22:09.090 回答
45

不确定“添加一个并选择它”的确切含义,因为无论如何默认情况下都会选择它。但是,如果您要添加多个,那就更有意义了。怎么样:

$('select').children().remove();
$('select').append('<option id="foo">foo</option>');
$('#foo').focus();

对“编辑”的回应:您能否澄清“此选择框由一组单选按钮填充”的意思?一个<select>元素不能(合法地)包含<input type="radio">元素。

于 2008-09-08T18:51:12.850 回答
27
$('#mySelect')
    .empty()
    .append('<option value="whatever">text</option>')
    .find('option:first')
    .attr("selected","selected")
;
于 2009-06-03T20:48:14.380 回答
22
$("#control").html("<option selected=\"selected\">The Option...</option>");
于 2011-03-30T02:30:23.197 回答
19

只需一行即可从选择标签中删除所有选项,然后您可以添加任何选项,然后在第二行添加选项。

$('.ddlsl').empty();

$('.ddlsl').append(new Option('Select all', 'all'));

还有一种捷径,但没试过

$('.ddlsl').empty().append(new Option('Select all', 'all'));
于 2019-07-17T06:29:50.450 回答
14

多亏了我收到的答案,我才能够创造出符合我需要的类似以下内容。我的问题有点模棱两可。感谢您的跟进。我的最后一个问题是通过在我想要选择的选项中包含“选择”来解决的。

$(function() {
  $('#mySelect').children().remove().end().append('<option selected value="One">One option</option>') ; // clear the select box, then add one option which is selected
  $("input[name='myRadio']").filter( "[value='1']" ).attr( "checked", "checked" ); // select radio button with value 1
  // Bind click event to each radio button.
  $("input[name='myRadio']").bind("click",
                                  function() {
    switch(this.value) {
      case "1":
        $('#mySelect').find('option').remove().end().append('<option selected value="One">One option</option>') ;
        break ;
      case "2":
        $('#mySelect').find('option').remove() ;
        var items = ["Item1", "Item2", "Item3"] ; // Set locally for demo
        var options = '' ;
        for (var i = 0; i < items.length; i++) {
          if (i==0) {
            options += '<option selected value="' + items[i] + '">' + items[i] + '</option>';
          }
          else {
            options += '<option value="' + items[i] + '">' + items[i] + '</option>';
          }
        }
        $('#mySelect').html(options);   // Populate select box with array
        break ;
    } // Switch end
  } // Bind function end
                                 ); // bind end
}); // Event listener end
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<label>One<input  name="myRadio" type="radio" value="1"  /></label>
<label>Two<input name="myRadio"  type="radio" value="2" /></label>
<select id="mySelect" size="9"></select>

于 2008-09-09T22:04:52.127 回答
9

我在网上找到了类似下面的东西。在我的情况下,有数千个选项,这比jQuery.empty().find().remove()来自 jQuery 快得多。

var ClearOptionsFast = function(id) {
    var selectObj = document.getElementById(id);
    var selectParentNode = selectObj.parentNode;
    var newSelectObj = selectObj.cloneNode(false); // Make a shallow copy
    selectParentNode.replaceChild(newSelectObj, selectObj);
    return newSelectObj;
}

更多信息在这里

于 2015-04-08T09:42:42.290 回答
8

将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>
');
于 2014-11-12T11:45:36.507 回答
8
  1. 首先清除所有现有选项,除了第一个选项(--Select--)

  2. 使用循环一一追加新选项值

    $('#ddlCustomer').find('option:not(:first)').remove();
    for (var i = 0; i < oResult.length; i++) {
       $("#ddlCustomer").append(new Option(oResult[i].CustomerName, oResult[i].CustomerID + '/' + oResult[i].ID));
    }
    
于 2015-09-30T06:58:01.857 回答
8

其他方式:

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

在这个链接下,有很好的做法https://api.jquery.com/select/

于 2017-07-13T15:55:15.087 回答
8
$("#id option").remove();
$("#id").append('<option value="testValue" >TestText</option>');

第一行代码将删除选择框的所有选项,因为没有提到选项查找条件。

第二行代码将添加具有指定值(“testValue”)和文本(“TestText”)的选项。

于 2018-10-12T09:14:32.037 回答
7

基于 mauretto 的回答,这更容易阅读和理解:

$('#mySelect').find('option').not(':first').remove();

要删除除具有特定值的选项之外的所有选项,您可以使用以下命令:

$('#mySelect').find('option').not('[value=123]').remove();

如果要添加的选项已经存在,这会更好。

于 2015-06-18T13:52:28.040 回答
4

这将用新的 mySelect 替换现有的 mySelect。

$('#mySelect').replaceWith('<Select id="mySelect" size="9">
   <option value="whatever" selected="selected" >text</option>
   </Select>');
于 2013-10-18T07:41:01.250 回答
4

使用 jquery prop()清除选中的选项

$('#mySelect option:selected').prop('selected', false);
于 2014-02-01T11:09:32.530 回答
4

你可以简单地通过替换 html

$('#mySelect')
.html('<option value="whatever" selected>text</option>')
.trigger('change');
于 2016-10-04T00:07:09.020 回答
3
  • 保存要附加到对象中的选项值
  • 清除选择标签中的现有选项
  • 迭代列表对象并将内容附加到预期的选择标签

var listToAppend = {'':'Select Vehicle','mc': 'Motor Cyle', 'tr': 'Tricycle'};

$('#selectID').empty();

$.each(listToAppend, function(val, text) {
    $('#selectID').append( new Option(text,val) );
  });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

于 2018-09-03T11:17:37.197 回答
3

我在 Select2 - Clearing Selections中看到了这段代码

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

即使没有 Select2,此代码也适用于 jQuery

于 2019-01-25T06:34:37.713 回答
2

我使用香草 javascript

let select = document.getElementById("mySelect");
select.innerHTML = "";
于 2021-08-02T14:56:59.703 回答
1

希望它会起作用

$('#myselect').find('option').remove()
.append($('<option></option>').val('value1').html('option1'));
于 2016-10-23T04:06:55.670 回答
1
var select = $('#mySelect');
select.find('option').remove().end()
.append($('<option/>').val('').text('Select'));
var data = [{"id":1,"title":"Option one"}, {"id":2,"title":"Option two"}];
for(var i in data) {
    var d = data[i];
    var option = $('<option/>').val(d.id).text(d.title);
    select.append(option);
}
select.val('');
于 2018-08-19T17:22:39.797 回答
1

清洁工给我点赞

   let data= []

   let inp = $('#mySelect')
        inp.empty()

        data.forEach(el=> inp.append(  new Option(el.Nombre, el.Id) ))
于 2022-02-01T19:08:22.907 回答
0

尝试

mySelect.innerHTML = `<option selected value="whatever">text</option>`

function setOne() {
  console.log({mySelect});
  mySelect.innerHTML = `<option selected value="whatever">text</option>`;
}
<button onclick="setOne()" >set one</button>
<Select id="mySelect" size="9"> 
 <option value="1">old1</option>
 <option value="2">old2</option>
 <option value="3">old3</option>
</Select>

于 2020-08-03T20:57:08.850 回答
0

最短的答案:

$('#mySelect option').remove().append('<option selected value="whatever">text</option>');
于 2021-06-27T08:18:45.117 回答