simple scratch from ejemplos bootstrap jquery jquery-ui accordion

ejemplos - jquery accordion from scratch



Menú de acordeón anidado en jQuery (1)

Solo unos pocos cambios en el orden de los elementos en su HTML y obtiene el comportamiento que está buscando. Al comienzo, solo 1a y 1b están abiertos. Del mismo modo, al hacer clic en 1b ahora se cerrará 1a, que también ocultará cualquier sección abierta de 2a / 2b.

$(document).ready(function() { $("#acc1").accordion({ active:".ui-accordion-left", alwaysOpen: false, autoheight: false, header: ''a.acc1'', clearStyle: true }); $("#acc2").accordion({ active:".ui-accordion-left", alwaysOpen: false, autoheight: false, header: ''a.acc2'', clearStyle: true }); }); <ul id="acc1" class="ui-accordion-container"> <li> <div class="ui-accordion-left"> </div> <a class="ui-accordion-link acc1">1a <span class="ui-accordion-right"></span> </a> <div> data of 1a<br/> data of 1a<br/> data of 1a<br/> <ul class="ui-accordion-container" id="acc2"> <li> <div class="ui-accordion-left"> </div> <a class="ui-accordion-link acc2">2a <span class="ui-accordion-right"></span> </a> <div> data of 2a<br/> data of 2a<br/> data of 2a<br/> </div> </li> <li> <div class="ui-accordion-left"> </div> <a class="ui-accordion-link acc2">2b <span class="ui-accordion-right"></span></a> <div> data of 2b<br/> data of 2b<br/> data of 2b<br/> </div> </li> </ul> </div> </li> <li> <div class="ui-accordion-left"></div> <a class="ui-accordion-link acc1">1b <span class="ui-accordion-right"></span></a> <div> data of 1b<br /> data of 1b<br /> dta of 1b <br /> </div> </li> </ul> </body>

Tengo un menú implementado usando un conjunto de acordeones anidados, 1 y 2 , cada uno con elementos, a y b .

Me gustaría implementar la siguiente lógica:

  • Cuando hago clic en 1a , obtendré los datos de 1a y dos submenús 2a , 2b

  • Cuando hago clic en 2a , 2b obtendré los datos de cada uno, respectivamente.

El problema

Resultado deseado:

  • Solo quiero mostrar el nth-most elemento secundario para el último clic, contrayendo todos los demás.
  • Tras la inicialización, solo 1a y 1b deberían estar visibles.

Resultado actual:

  • Al hacer clic en 1b , luego en 2b , 1b todavía está completamente visible.

Código JavaScript

$(document).ready(function() { $("#acc1").accordion({ active:".ui-accordion-left", alwaysOpen: false, autoheight: false, header: ''a.acc1'', clearStyle: true }); $("#acc2").accordion({ alwaysOpen: false, autoheight: false, header: ''a.acc2'', clearStyle: true }); });

HTML:

<ul id="acc1" class="ui-accordion-container"> <li> <div class="ui-accordion-left"></div> <a class="ui-accordion-link acc1">1a <span class="ui-accordion-right"></span> </a> <div> data of 1a<br/> data of 1a<br/> data of 1a<br/> </div> <div> <ul class="ui-accordion-container" id="acc2"> <li> <div class="ui-accordion-left"></div> <a class="ui-accordion-link acc2">2a <span class="ui-accordion-right"></span> </a> <div> data of 2a<br/> data of 2a<br/> data of 2a<br/> </div> </li> <li> <div class="ui-accordion-left"></div> <a class="ui-accordion-link acc2">2b <span class="ui-accordion-right"></span> </a> <div> data of 2b<br/> data of 2b<br/> data of 2b<br/> </div> </li> </ul> </div> </li> <li> <div class="ui-accordion-left"></div> <a class="ui-accordion-link acc1">1b <span class="ui-accordion-right"></span> </a> <div> data of 1b<br /> data of 1b<br /> dta of 1b <br /> </div> </li> </ul>