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

219
Visualizações
problemas al colapsar los menús javascript anidados

Tengo un menú de navegación en la barra lateral (HTML5/CSS/Vanilla JavaScript) que actúa como un acordeón con múltiples niveles de menús anidados. Todo funciona hasta ahora en términos de ocultar y mostrar menús y aplicar los estilos correctos para los distintos estados EXCEPTO por 1 cosa.

Si se expande un menú principal (que muestra un submenú) y uno de sus elementos secundarios también se expande para mostrar un submenú secundario... algo así:

 - Menu Item 1 - Menu Item 2 |_ Item 2.1 |_ Item 2.1.1 |_ Item 2.1.2 |_ Item 2.2 - Menu item 3 |_ Item 3.1

Al hacer clic en cualquier elemento con subelementos (Ej.: Menu Item 2 o Menu Item 2.1 no solo debería ocultar TODOS los elementos del menú (y submenú), sino que también debería colapsar todos los submenús anidados dentro de ese padre para que cuando vuelve a hacer clic en un elemento con submenús (para mostrarlo), todos se "restablecen" a su estado original, PERO esto solo debería aplicarse a los elementos y menús anidados debajo del elemento en el que se hizo clic.

Hacer clic en el Menu Item 2 debería producir esto:

 - Menu Item 1 - Menu Item 2 - Menu item 3 |_ Item 3.1

En cambio, está produciendo esto:

 - Menu Item 1 - Menu Item 2 - Menu item 3

TODOS los submenús (sin importar en qué elemento esté anidado) se contraen y ocultan.

Puedes verlo en este Codepen .

Las líneas correspondientes a esto son

 const allItems = clicked.parentElement.querySelectorAll("li"); const allMenus = clicked.closest('.nav-list').querySelectorAll("ul"); allItems.forEach((item) => item.classList.remove("selected")); allMenus.forEach((menu) => { This.hide(menu); menu.classList.toggle('open'); });

Tiene que ser algo justo en frente de mí, pero parece que no puedo aislarlo. Cualquier ayuda sería muy apreciada. También siéntase libre de criticar cualquier otra cosa que vea que no califique como "mejores prácticas".

about 4 years ago · Juan Pablo Isaza
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