Jak usunąć wszystkie opcje pola wyboru, a następnie dodać jedną opcję i wybrać ją za pomocą jQuery?

Używając core jQuery, jak usunąć wszystkie opcje pola wyboru, dodać jedną opcję i wybrać ją?

Moje pole wyboru jest następujące.

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

EDIT: poniższy kod był pomocny przy łańcuchowaniu. Jednak (w Internet Explorer) .val('whatever') nie zaznaczono opcji, która została dodana. (Użyłem tej samej 'wartości' zarówno w .append, jak i .val.)

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

EDIT: próbując zmusić go do naśladowania tego kodu, używam następującego kodu, gdy strona / formularz jest resetowany. To pole wyboru jest wypełniony zestawem przycisków radiowych. {[7] } było bliżej, ale opcja nie była wybrana tak, jak ma to miejsce w przypadku .selected= "true". Nie ma nic złego w moim istniejącym kodzie - próbuję tylko nauczyć się jQuery.

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

EDIT: wybrana odpowiedź była bliska temu, czego potrzebowałem. To mi się udało:

$('#mySelect').children().remove().end().append('<option selected value="whatever">text</option>') ;
Ale obie odpowiedzi doprowadziły mnie do ostatecznego rozwiązania..
Author: Martin Smith, 2008-09-07

21 answers

$('#mySelect')
    .find('option')
    .remove()
    .end()
    .append('<option value="whatever">text</option>')
    .val('whatever')
;
 1507
Author: Matt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-17 02:25:14
$('#mySelect')
    .empty()
    .append('<option selected="selected" value="whatever">text</option>')
;
 624
Author: Mahzilla,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-08 14:24:08

Dlaczego po prostu nie używać zwykłego javascript?

document.getElementById("selectID").options.length = 0;
 109
Author: Shawn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-14 08:50:05

Miałem błąd w IE7 (działa dobrze w IE6), gdzie użycie powyższych metod jQuery wyczyściłoby select w DOM, ale nie na ekranie. Korzystając z paska narzędzi programisty IE mogłem potwierdzić, że select zostało wyczyszczone i zawiera nowe elementy, ale wizualnie select nadal pokazuje stare elementy - nawet jeśli nie można ich zaznaczyć.

Poprawka polegała na użyciu standardowych metod DOM/properites (jak oryginał plakatu), aby wyczyścić, a nie jQuery - nadal używając jQuery do dodawania opcji.

$('#mySelect')[0].options.length = 0;
 72
Author: row1,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-11 09:22:09

Jeśli twoim celem jest usunięcie wszystkich opcji z select z wyjątkiem pierwszej (zazwyczaj opcji "proszę wybrać element"), możesz użyć:

$('#mySelect').find('option:not(:first)').remove();
 68
Author: mauretto,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-27 09:56:28
$('#mySelect')
    .empty()
    .append('<option value="whatever">text</option>')
    .find('option:first')
    .attr("selected","selected")
;
 24
Author: Hayden Chambers,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-03 20:48:14

Nie wiem dokładnie, co masz na myśli przez "Dodaj i wybierz", ponieważ i tak będzie wybrana domyślnie. Ale jeśli dodałbyś więcej niż jeden, to miałoby to więcej sensu. A może coś w stylu:

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

Odpowiedź na"Edytuj" : czy możesz wyjaśnić, co masz na myśli przez "to pole wyboru jest wypełnione zestawem przycisków radiowych"? Element .

 23
Author: Bobby Jack,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-08 22:28:36
$("#control").html("<option selected=\"selected\">The Option...</option>");
 20
Author: jvarandas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-03-30 02:30:23

Dzięki odpowiedziom, które otrzymałam, udało mi się stworzyć coś takiego jak poniżej, co odpowiada moim potrzebom. Moje pytanie było niejednoznaczne. Dzięki za śledzenie. Mój ostatni problem został rozwiązany poprzez włączenie "selected" w opcji, którą chciałem wybrać.

$(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>
 10
Author: Jay Corbett,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-24 11:41:38
  1. Najpierw wyczyść wszystkie exisiting opcja execpt pierwsza (--Select--)

  2. Dodawanie nowych wartości opcji za pomocą pętli jeden po drugim

    $('#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));
    }
    
 8
Author: Jaydeep Shil,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-07 12:19:17

Może po prostu zmienimy html na nowe dane.

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

Inny przykład:

$('#mySelect').html('
    <option value="1" selected>text1</option>
    <option value="2">text2</option>
    <option value="3" disabled>text3</option>
');
 7
Author: Shiv,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-01 15:29:08

Inny sposób:

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

Pod tym linkiem znajdują się dobre praktyki https://api.jquery.com/select/

 7
Author: Jhon Intriago Thoth,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-13 16:49:53

Znalazłem w sieci coś takiego jak poniżej. Z tysiącami opcji jak w mojej sytuacji jest to o wiele szybsze niż .empty() lub {[2] } z 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;
}

Więcej informacji tutaj .

 6
Author: marioosh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-08 09:42:42

Opierając się na odpowiedzi, jest to trochę łatwiejsze do odczytania i zrozumienia:

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

Aby usunąć wszystkie opcje z wyjątkiem jednej o określonej wartości, możesz użyć tego:

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

Byłoby lepiej, gdyby opcja do dodania była już dostępna.

 6
Author: humbads,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-18 13:52:28

Spowoduje zastąpienie istniejącego programu mySelect nowym programem mySelect.

$('#mySelect').replaceWith('<Select id="mySelect" size="9">
   <option value="whatever" selected="selected" >text</option>
   </Select>');
 4
Author: Barun,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-03 07:07:41

Możesz to zrobić po prostu zastępując html

$('#mySelect')
.html('<option value="whatever" selected>text</option>')
.trigger('change');
 4
Author: Nadeem Manzoor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-04 00:07:09

Używa jQuery prop () aby wyczyścić zaznaczoną opcję

$('#mySelect option:selected').prop('selected', false);
 3
Author: mehrdad,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-01 11:27:54

Hope it will work

$('#myselect').find('option').remove()
.append($('<option></option>').val('value1').html('option1'));
 1
Author: Md. Russel Hussain,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-23 04:06:55
  • Zapisz wartości opcji do dodania w obiekcie
  • Wyczyść istniejące opcje w znaczniku select
  • iteracja obiektu list i dołączenie zawartości do zamierzonego znacznika select

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>
 1
Author: Nifemi Sola-Ojo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-03 11:17:37
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('');
 0
Author: LN Nitharsan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-19 17:38:08
$("#id option").remove();
$("#id").append('<option value="testValue" >TestText</option>');

Pierwsza linia kodu usunie wszystkie opcje pola wyboru, ponieważ nie wspomniano o opcji Znajdź kryteria.

Druga linia kodu doda opcję o podanej wartości ("testValue") oraz tekst ("TestText").

 -1
Author: Devkinandan Chauhan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-10-12 10:59:19