Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

113
Visualizações
Agregar HTMLOptGroup dinámicamente

Actualmente estoy agregando opciones a un elemento de selección de forma dinámica como esta:

 const jobs = [{...},{...},{...}]; const jobsInput = document.querySelector(...); jobs.forEach(job => { const option = new Option(`${job.title}`, job.id); jobsInput.add(option, undefined); });

Me gustaría poder agregar un <optgroup> cada vez que cambie una propiedad del objeto de trabajo ( job.companyName ). Estoy bastante seguro de que la lógica detrás de eso es bastante fácil, pero no conozco la sintaxis. Mozilla habla de un HTMLOptGroupElement , pero no sé cómo usarlo. Cuando lo intento, aparece un error illegal constructor .

Habría pensado que lo agregarías así:

 const optGroup = new HTMLOptGroupElement('title'); jobsInput.add(optGroup); optGroup.label = 'title';

pero obviamente solo estoy inventando esto y no funciona :) No puedo encontrar nada que explique cómo implementar el elemento. Si tuviera que adivinar es porque es una interfaz, pero eso todavía no me ayuda

Gracias

about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

Deberías usar :

 const optGroup = document.createElement('optgroup');

que en realidad devuelve un HTMLOptGroupElement .

El error de Illegal constructor ocurre porque HTMLOptGroupElement es una interfaz que no puede instanciar por sí misma (invocando un constructor con la nueva palabra clave), como clases abstractas en general para la mayoría de los lenguajes OO.

Por lo general, se prefiere usar document.createElement en lugar de constructores por coherencia, porque no todos los HTMLElements tienen un constructor, mientras que este método es la forma genérica de crear cualquier elemento HTML.

Además, tenga en cuenta que cada opción (use document.createElement('option') también) debe agregarse a su elemento optGroup (principal) respectivo, y optGroups al elemento de selección principal.

about 4 years ago · Juan Pablo Isaza Relatório

0

Puede usar forEach y un simple if.

Solo necesita mantener disponible el grupo actual: cuando agrega, el grupo se reemplaza

HTMLOptGroupElement se crea usando document.createElement("optgroup");

 const jobs = [ {"companyName":"BMW","title":"Director","id":"1"}, {"companyName":"BMW","title":"Service desk","id":"2"}, {"companyName":"Honda","title":"VP","id":"3"}, {"companyName":"Honda","title":"VP1","id":"4"}, {"companyName":"Honda","title":"VP2","id":"5"}, {"companyName":"Fiat","title":"VP","id":"6"}, {"companyName":"Fiat","title":"VP1","id":"7"}, {"companyName":"Fiat","title":"VP2","id":"8"} ]; const sel = document.getElementById("jobSelect"); jobs.forEach(job => { let group = sel.querySelector(`optgroup[label="${job.companyName}"]`); if (!group) { group = document.createElement("optgroup"); group.label = job.companyName; } const opt = new Option(job.title, job.id); opt.classList.add("colored"); // may not actually do anything in some browsers group.append(opt) sel.appendChild(group) })
 .colored{ color: red; }
 <select id="jobSelect"></select>

Chrome 100 Windows 10 Empresa

ingrese la descripción de la imagen aquí

cromo 100 osx

ingrese la descripción de la imagen aquí

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda