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

Jay*_*ett 1028 javascript jquery html-select option

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

我的选择框如下.

<Select id="mySelect" size="9"> </Select>
Run Code Online (Sandbox Code Playgroud)

编辑:以下代码有助于链接.但是,(在Internet Explorer中).val('whatever')未选择已添加的选项.(我没有使用两个相同的"价值" .append.val.)

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

编辑:试图让它模仿这个代码,每当页面/窗体重置时,我使用以下代码.此选择框由一组单选按钮填充..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";
Run Code Online (Sandbox Code Playgroud)

编辑:选择的答案接近我需要的.这对我有用:

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

但这两个答案都让我得到了最后的解决方案..

Mat*_*att 1646

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

  • 注意你也可以分解选项/ attr/text,如:`.append($("<option> </ option>").attr("value",'123').text('ABC!')` (9认同)
  • @nickf:我有同样的问题,但我需要添加一组复选框而不是一个更改下拉列表,但我的复选框来自xml.这不起作用 (3认同)
  • @BrockHensley你甚至可以使用`.append($("<option> </ option>",{'value':'123'}).text('ABC!')` (3认同)

小智 683

$('#mySelect')
    .empty()
    .append('<option selected="selected" value="whatever">text</option>')
;
Run Code Online (Sandbox Code Playgroud)

  • @DanEsparza我让你成为了一个jsperf; `empty()`当然更快;)http://jsperf.com/find-remove-vs-empty (49认同)
  • 出于好奇,"空"比"找到"更快?看起来就像是 - 因为'find'会使用一个选择器而'empty'会强制清空该元素. (32认同)
  • @TakácsZsolt也许你应该在链的末尾添加一个`.val('whatever')`,就像Matt的回答一样. (5认同)

Sha*_*awn 123

为什么不只是使用普通的JavaScript?

document.getElementById("selectID").options.length = 0;
Run Code Online (Sandbox Code Playgroud)

  • 我同意这是删除所有选项的最简单的解决方案,但这只能回答问题的一半...... (7认同)
  • 这不会造成内存泄漏吗?选项元素现在不可访问但仍被分配。 (4认同)

row*_*ow1 76

我在IE7中有一个错误(在IE6中工作正常),使用上面的jQuery方法将清除DOM中的选择而不是屏幕上的选择.使用IE Developer Toolbar我可以确认选择已被清除并拥有新项目,但在视觉上,选择仍显示旧项目 - 即使您无法选择它们.

解决方法是使用标准的DOM方法/特性(如海报原版)来清除而不是jQuery - 仍然使用jQuery来添加选项.

$('#mySelect')[0].options.length = 0;
Run Code Online (Sandbox Code Playgroud)

  • 我必须在ie6中使用这个方法,因为.empty()导致隐藏容器中包含的选择框即使在隐藏父级时也可见. (6认同)
  • +1这是最可读的(在我看来)和jsPerf链接(@vzwick链接)接受的答案慢了34%(Opera 20) (3认同)
  • 这种方法也变得有点小(约1%)更高性能:http://jsperf.com/find-remove-vs-empty (2认同)

mau*_*tto 73

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

$('#mySelect').find('option:not(:first)').remove();
Run Code Online (Sandbox Code Playgroud)

  • 这应该是答案.所有其他人故意删除第一个,以后再重新创建它,我不喜欢; 它还意味着他们首先也存储了第一个选项. (10认同)

Bob*_*ack 31

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

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

对"编辑"的回应:你能澄清一下"这个选择框是否由一组单选按钮填充"的含义?甲<select>元件不能(合法)包含<input type="radio">元素.


Hay*_*ers 26

$('#mySelect')
    .empty()
    .append('<option value="whatever">text</option>')
    .find('option:first')
    .attr("selected","selected")
;
Run Code Online (Sandbox Code Playgroud)

  • 可能必须在末尾添加.change()以触发select的更改 (3认同)
  • 我们仍在使用IE6,这种方法不起作用.但是,它确实在FF 3.5.6中有效 (2认同)

小智 21

$("#control").html("<option selected=\"selected\">The Option...</option>");
Run Code Online (Sandbox Code Playgroud)


Kau*_*ali 16

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

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

$('.ddlsl').append(new Option('Select all', 'all'));
Run Code Online (Sandbox Code Playgroud)

一种更短的方法,但没有尝试

$('.ddlsl').empty().append(new Option('Select all', 'all'));
Run Code Online (Sandbox Code Playgroud)


Jay*_*ett 12

感谢我收到的答案,我能够创建符合我需求的以下内容.我的问题有些含糊不清.感谢您的跟进.通过在我想要的选项中包含"selected"来解决我的最终问题.

$(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
Run Code Online (Sandbox Code Playgroud)
<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>
Run Code Online (Sandbox Code Playgroud)


Shi*_*hiv 8

如何将html更改为新数据.

$('#mySelect').html('<option value="whatever">text</option>');
Run Code Online (Sandbox Code Playgroud)

另一个例子:

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


Jay*_*hil 8

  1. 首先清除所有现有选项execpt第一个( - 选择 - )

  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));
    }
    
    Run Code Online (Sandbox Code Playgroud)


小智 7

其他方式:

$('#select').empty().append($('<option>').text('---------').attr('value',''));
Run Code Online (Sandbox Code Playgroud)

在此链接下,有一些好的做法https://api.jquery.com/select/


mar*_*osh 6

我在网上发现了类似下面的东西.随着成千上万的像我的情况的选项,这是比快了很多.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;
}
Run Code Online (Sandbox Code Playgroud)

更多信息在这里.


hum*_*ads 6

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

$('#mySelect').find('option').not(':first').remove();
Run Code Online (Sandbox Code Playgroud)

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

$('#mySelect').find('option').not('[value=123]').remove();
Run Code Online (Sandbox Code Playgroud)

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


Dev*_*han 6

$("#id option").remove();
$("#id").append('<option value="testValue" >TestText</option>');
Run Code Online (Sandbox Code Playgroud)

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

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