Eliminar un elemento de un cuadro de selección

269

¿Cómo elimino o agrego elementos de un cuadro de selección? Estoy ejecutando jQuery, si eso facilita la tarea. A continuación se muestra un cuadro de selección de ejemplo.

<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
fuente

Respuestas:

491

Eliminar una opción:

$("#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>

Agrega una opción:

$("#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
fuente
77
Si necesita eliminar una opción y seleccionar otra: $ ('# selectBox'). Val ('opción2'). Find ('opción [valor = "opción1"]'). Eliminar ();
Radu Maris
8
Honestamente, creo que la forma en que se manipulan los cuadros de selección a través de JavaScript es una de las cosas más confusas de la historia, incluso cuando se tiene un conocimiento razonablemente bueno de los selectores y el DOM.
Tacroy
79

Puede eliminar el elemento seleccionado con esto:

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

Esto es útil si tiene una lista y no un menú desplegable.

Etienne Dupuis
fuente
Está eliminando todo para mí ... Espera, estoy usando Seleccionar con múltiples atributos. ¿Cómo puedo eliminarlo de la selección múltiple?
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 agregar el elemento, crearía un segundo cuadro de selección y:

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

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

addSelect.onclick = add;

Aunque no jQuery.

Adriana
fuente
44
@JBeckton: mirando hacia atrás a esto escrito hace 4 años, me río de mí mismo y tienes razón :)
Adriana
25

Para eliminar un artículo

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

Para agregar un elemento

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

Para verificar una opción

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

Para eliminar una opción seleccionada

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

Esto debería hacerlo:

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

Creo que el complemento de manipulación de cuadro de selección jQuery es útil para este tipo de cosas.

Puede eliminar fácilmente un elemento por índice, valor o expresión regular.

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 eliminar todas las opciones, puedes hacerlo $("#myselect").removeOption(/./);.

Zoredache
fuente
55
-1 porque esto se puede hacer sin un plugin usando jQuery y programación básica.
Slopeside Creative
ᕀ 1 por qué reinventar la rueda
John Hascall
9

Agregar / eliminar valor dinámicamente sin código duro:

// elimina el valor de select dinámicamente

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

// Añadir valor dinámico para seleccionar

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

Solo para aumentar esto para cualquiera que busque, también puede simplemente:

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

y

$("#selectBox option[value='option1']").show();
AA11oAKas
fuente
Creo que esto varía depende del navegador. Podría deshabilitar esa opción en particular.
Adam Ware
No recomiendo este método, ya que es específico del navegador.
Scott Shaw-Smith
Esta es una publicación antigua pero me gustaría comentar sobre esto. Aunque esta es una muy buena manera de lidiar con la opción de selección, no se recomienda porque IE no lo admite
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>

Jack
fuente
2

Tuve que eliminar la primera opción de una selección, sin ID, solo una clase, así que usé este código con éxito:

$('select.validation').find('option:first').remove();
usuario3027485
fuente
0

Solo quiero sugerir otra forma de agregar un option. En lugar de establecer valuey textcomo una cadena, también se puede hacer:

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

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

Esta es una solución menos propensa a errores al agregar valores y textos de opciones dinámicamente.

polkduran
fuente
No soy el votante, pero parece que respondiste a OP a mitad de camino con cómo agregar una opción, pero no cómo eliminar una opción.
John Odom
0

Si alguien necesita eliminar TODAS las opciones dentro de una selección, hice una pequeña función.

Espero que le sea ú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(); 
    })
}

Solo hay que correr

removeAllOptionsSelect("#contenedor_modelos");
daronwolff
fuente
2
¿No es igual el resultado $('#contenedor_modelos').empty();? Aunque es agradable ver algo de acción :)
MineSweeper
0

esto es seleccionar cuadro 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>

cuando desee eliminar y agregar totalmente la opción del cuadro de selección, puede usar este código

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

a veces necesitamos ocultar y mostrar la opción del cuadro de selección, pero no eliminarla, entonces puede usar este código

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

a veces es necesario eliminar la opción seleccionada del cuadro de selección y luego

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

cuando necesite eliminar todas las opciones, este código

('#selectBox').empty();

cuando necesite la primera opción o la última, entonces este código

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