Removendo um item de uma caixa de seleção

269

Como removo itens de ou adiciono itens a uma caixa de seleção? Estou executando o jQuery, caso isso facilite a tarefa. Abaixo está um exemplo de caixa de seleção.

<select name="selectBox" id="selectBox">
    <option value="option1">option1</option>
    <option value="option2">option2</option>
    <option value="option3">option3</option>
    <option value="option4">option4</option>    
</select>
Teifion
fonte

Respostas:

491

Remova uma opção:

$("#selectBox option[value='option1']").remove();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select name="selectBox" id="selectBox">
  <option value="option1">option1</option>
  <option value="option2">option2</option>
  <option value="option3">option3</option>
  <option value="option4">option4</option>	
</select>

Adicione uma opção:

$("#selectBox").append('<option value="option5">option5</option>');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select name="selectBox" id="selectBox">
  <option value="option1">option1</option>
  <option value="option2">option2</option>
  <option value="option3">option3</option>
  <option value="option4">option4</option>	
</select>

dsimard
fonte
7
Se você precisar remover uma opção e selecionar outra: $ ('# selectBox'). Val ('opção2'). Find ('option [value = "option1"]'). Remove ();
Radu Maris
8
Honestamente, acho que a maneira como as caixas de seleção são manipuladas via javascript é uma das coisas mais confusas de todos os tempos, mesmo quando você tem uma compreensão razoavelmente boa dos seletores e do DOM.
quer
79

Você pode excluir o item selecionado com este:

$("#selectBox option:selected").remove();

Isso é útil se você tiver uma lista e não uma lista suspensa.

Etienne Dupuis
fonte
Está removendo tudo para mim ... Aguarde, estou usando o Select com vários atributos. Como posso removê-lo da seleção múltipla?
Akshay
27
window.onload = function ()
{   
    var select = document.getElementById('selectBox');
    var delButton = document.getElementById('delete');

    function remove()
    {
        value = select.selectedIndex;
        select.removeChild(select[value]);
    }

    delButton.onclick = remove;    
}

Para adicionar o item, eu criaria a segunda caixa de seleção e:

var select2 = document.getElementById('selectBox2');
var addSelect = document.getElementById('addSelect');

function add()
{
    value1 = select2.selectedIndex;
    select.appendChild(select2[value1]);    
}

addSelect.onclick = add;

Não é o jQuery.

Adriana
fonte
4
@JBeckton: olhando para isto escrito 4 anos atrás eu rir de mim mesmo e você está certo :)
Adriana
25

Para remover um item

$("select#mySelect option[value='option1']").remove(); 

Para adicionar um item

$("#mySelect").append('<option value="option1">Option</option>');

Para verificar uma opção

$('#yourSelect option[value=yourValue]').length > 0;

Para remover uma opção selecionada

$('#mySelect :selected').remove(); 
Usman Shaukat
fonte
20

Isso deve servir:

$('#selectBox').empty();
qwe
fonte
18

Acho que o plugin de manipulação da caixa de seleção do jQuery é útil para esse tipo de coisa.

Você pode remover facilmente um item por índice, valor ou regex.

removeOption(index/value/regex/array[, selectedOnly])

Remove an option by
- index: $("#myselect2").removeOption(0);
- value: $("#myselect").removeOption("Value");
- regular expression: $("#myselect").removeOption(/^val/i);
- array $("#myselect").removeOption(["myselect_1", "myselect_2"]);

Para remover todas as opções, você pode fazer $("#myselect").removeOption(/./);.

Zoredache
fonte
5
-1 porque isso pode ser feito sem um plugin usando jQuery e programação básica.
Slopeside Creative
ᕀ 1 por que reinventar a roda
John Hascall
9

Adicionando / removendo valor dinamicamente sem código físico:

// remove o valor de selecionar dinamicamente

$("#id-select option[value='" + dynamicVal + "']").remove();

// Adicione valor dinâmico para selecionar

$("#id-select").append('<option value="' + dynamicVal + '">' + dynamicVal + '</option>');
Muru Bakthavachalam
fonte
5

Apenas para aumentar isso para quem procura, você também pode:

$("#selectBox option[value='option1']").hide();

e

$("#selectBox option[value='option1']").show();
AA11oAKas
fonte
Eu acho que isso varia depende do navegador. Pode apenas desativar essa opção específica.
Adam Ware
Eu não recomendo este método, pois é específico do navegador.
Scott Shaw-Smith
Este é um post antigo, mas eu gostaria de comentar sobre isso. Embora esta seja uma maneira muito agradável para lidar com selecione a opção, não é recomendado porque o IE não apoiá-lo
Ahmed Ali
4

Javascript

function removeOptionsByValue(selectBox, value)
{
  for (var i = selectBox.length - 1; i >= 0; --i) {
    if (selectBox[i].value == value) {
      selectBox.remove(i);
    }
  }
}

function addOption(selectBox, text, value, selected)
{
  selectBox.add(new Option(text, value || '', false, selected || false));
}

var selectBox = document.getElementById('selectBox');

removeOptionsByValue(selectBox, 'option3');
addOption(selectBox, 'option5', 'option5', true);
<select name="selectBox" id="selectBox">
    <option value="option1">option1</option>
    <option value="option2">option2</option>
    <option value="option3">option3</option>
    <option value="option4">option4</option>	
</select>

jQuery

jQuery(function($) {
  $.fn.extend({
    remove_options: function(value) {
      return this.each(function() {
        $('> option', this)
          .filter(function() {
            return this.value == value;
          })
          .remove();
      });
    },
    add_option: function(text, value, selected) {
      return this.each(function() {
        $(this).append(new Option(text, value || '', false, selected || false));
      });
    }
  });
});

jQuery(function($) {
  $('#selectBox')
    .remove_options('option3')
    .add_option('option5', 'option5', true);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select name="selectBox" id="selectBox">
    <option value="option1">option1</option>
    <option value="option2">option2</option>
    <option value="option3">option3</option>
    <option value="option4">option4</option>	
</select>

Ja͢ck
fonte
2

Eu tive que remover a primeira opção de um select, sem ID, apenas uma classe, então usei esse código com sucesso:

$('select.validation').find('option:first').remove();
user3027485
fonte
0

Eu só quero sugerir outra maneira de adicionar um option. Em vez de definir o valuee textcomo uma string também se pode fazer:

var option = $('<option/>')
                  .val('option5')
                  .text('option5');

$('#selectBox').append(option);

Essa é uma solução menos propensa a erros ao adicionar valores e textos de opções dinamicamente.

Polkduran
fonte
Eu não sou o defensor do voto negativo, mas parece que você respondeu ao OP com a forma de adicionar uma opção, mas não como remover uma opção.
John Odom
0

Se alguém precisar excluir TODAS as opções dentro de um select, executei uma função pequena.

Espero que você ache útil

var removeAllOptionsSelect = function(element_class_or_id){
    var element = $(element_class_or_id+" option");
    $.each(element,function(i,v){
        value = v.value;
        $(element_class_or_id+" option[value="+value+"]").remove(); 
    })
}

Só tem que correr

removeAllOptionsSelect("#contenedor_modelos");
daronwolff
fonte
2
O resultado não é igual a $('#contenedor_modelos').empty();? É bom ver alguma ação embora :)
MineSweeper
0

esta é a caixa de seleção html

<select name="selectBox" id="selectBox">
<option value="option1">option1</option>
<option value="option2">option2</option>
<option value="option3">option3</option>
<option value="option4">option4</option>    
</select>

quando você quiser remover e adicionar totalmente a opção da caixa de seleção, poderá usar este código

$("#selectBox option[value='option1']").remove();
$("#selectBox").append('<option value="option1">Option</option>');

em algum momento, precisamos ocultar e mostrar a opção na caixa de seleção, mas não remover, você pode usar esse código

 $("#selectBox option[value='option1']").hide();
 $("#selectBox option[value='option1']").show();

algum dia precisa remover a opção selecionada da caixa de seleção e

$('#selectBox :selected').remove();
$("#selectBox option:selected").remove();

quando você precisar remover todas as opções, esse código

('#selectBox').empty();

quando precisa a primeira opção ou a última, então este código

$('#selectBox').find('option:first').remove();
$('#selectBox').find('option:last').remove();
Shafiqul Islam
fonte