Guia de manipulação de elementos select com JavaScript e jQuery

Trabalhar com elementos select é uma tarefa comum no desenvolvimento web. Este guia oferece uma visão completa das operações frequentes utilizando JavaScript puro e jQuery, com exemplos de código adaptados.

Operações com JavaScript puro

Abaixo estão funções utilitárias para gerenciar opções em um select.

Verificar se uma opção com valor específico já existe:

function checkOptionExists(selectElement, targetValue) {
  let found = false;
  const options = selectElement.options;
  for (let idx = 0; idx < options.length; idx++) {
    if (options[idx].value === targetValue) {
      found = true;
      break;
    }
  }
  return found;
}

Adicionar uma nova opção ao select:

function addOptionToSelect(selectElement, optionText, optionValue) {
  if (checkOptionExists(selectElement, optionValue)) {
    console.log("Valor já existente na lista.");
    return;
  }
  const newOption = new Option(optionText, optionValue);
  selectElement.options.add(newOption);
  console.log("Opção adicionada com sucesso.");
}

Remover uma opção por valor:

function removeOptionByValue(selectElement, optionValue) {
  if (!checkOptionExists(selectElement, optionValue)) {
    console.log("Opção não encontrada.");
    return;
  }
  const opts = selectElement.options;
  for (let i = 0; i < opts.length; i++) {
    if (opts[i].value === optionValue) {
      selectElement.remove(i);
      break;
    }
  }
  console.log("Opção removida.");
}

Excluir todas as opções selecionadas pelo usuário:

function removeSelectedOptions(selectElement) {
  for (let i = selectElement.options.length - 1; i >= 0; i--) {
    if (selectElement.options[i].selected) {
      selectElement.remove(i);
    }
  }
}

Atualizar o texto de uma opção baseado em seu valor:

function updateOptionText(selectElement, newValue, newText) {
  if (!checkOptionExists(selectElement, newValue)) {
    console.log("Opção inexistente para atualização.");
    return;
  }
  const allOptions = selectElement.options;
  for (let j = 0; j < allOptions.length; j++) {
    if (allOptions[j].value === newValue) {
      allOptions[j].text = newText;
      break;
    }
  }
  console.log("Texto da opção atualizado.");
}

Selecionar a primeira opção com um texto específico:

function selectFirstByText(selectElement, searchText) {
  let selected = false;
  for (let k = 0; k < selectElement.options.length; k++) {
    if (selectElement.options[k].text === searchText) {
      selectElement.options[k].selected = true;
      selected = true;
      break;
    }
  }
  if (selected) {
    console.log("Opção selecionada por texto.");
  } else {
    console.log("Nenhuma opção com o texto informado.");
  }
}

Definir seleção por valor diretamente:

function selectByValue(selectElement, valueToSet) {
  selectElement.value = valueToSet;
}

Obter informações da seleção atual:

// Valor da opção selecionada
const currentValue = selectElement.value;

// Texto da opção selecionada
const currentText = selectElement.options[selectElement.selectedIndex].text;

// Índice da opção selecionada
const currentIndex = selectElement.selectedIndex;

Limpar todas as opções do select:

function clearSelectOptions(selectElement) {
  selectElement.options.length = 0;
}

Operações com jQuery

jQuery simplifica a manipulação do DOM. Considere um select com classe .my-select.

Definir uma opção como selecionada pelo seu valor:

$(".my-select").val("exemplo");

Selecionar uma opção pelo seu texto visível:

$(".my-select").find("option").filter(function() {
  return $(this).text() === "exemplo";
}).prop("selected", true);

Recuperar o valor da opção atualmente escolhida:

const selectedValue = $(".my-select").val();

Obter o texto da opção selecioanda:

const selectedText = $(".my-select").find(":selected").text();

Criar uma lista dependente (cascata) entre dois selects:

$("#primary-select").on("change", function() {
  const dependentSelect = $("#secondary-select");
  dependentSelect.empty();

  // Gerar opções dinamicamente com base na seleção primária
  const newOption = $("<option>")
    .attr("value", "novo-valor")
    .text("Nova opção gerada");
  
  dependentSelect.append(newOption);
});</option>

Tags: javascript jQuery DOM HTML select manipulação de elementos

Publicado em 7-7 18:35