2011-12-22 14 views
6

estoy trabajando en este menú:jQuery menú del botón

enter image description here

HTML:

<ul id="menu"> 
    <li><a href="#">Item 1</a></li> 
    <li><a href="#">Item 2</a></li> 
    <li><a href="#">Item 3</a></li> 
    <li><a href="#">Item 4</a></li> 
</ul><!-- end #menu --> 

<ul class="submenu submenu-1"> 
    <li><a href="#">Item 1.1</a></li> 
    <li><a href="#">Item 1.2</a></li> 
    <li><a href="#">Item 1.3</a></li> 
    <li><a href="#">Item 1.4</a></li> 
</ul><!-- end #submenu.submenu-item1 --> 
<ul class="submenu submenu-2"> 
    <li><a href="#">Item 1.1</a></li> 
    <li><a href="#">Item 1.2</a></li> 
    <li><a href="#">Item 1.3</a></li> 
    <li><a href="#">Item 1.4</a></li> 
</ul><!-- end #submenu.submenu-item1 --> 

<div class="hero hero-1">content</div> 
<div class="hero hero-2">content</div> 
<div class="hero hero-3">content</div> 
<div class="hero hero-4">content</div> 

jQuery:

$('#menu li a').click(function() { 
    $('#menu li').removeClass('active'); 
    $('.submenu, .hero').slideDown('normal'); 
}); 
$('.submenu, .hero').hide(); 

... que actualmente muestra todos los submenús y divs héroe Lo que quiero es ... si es PRIMERO li del #menú, debería buscar el submenú-1 y el héroe-1 y el deslizamiento.

Realmente agradecería cualquier ayuda.

Gracias!

+0

Esto parece sacado de un libro de texto. ¿Tienes algún HTML adjunto? – Dutchie432

+0

Claro, html agregado – 3zzy

+0

No, realmente creé la maqueta utilizando balsamiq, la necesito para mi sitio web. – 3zzy

Respuesta

2

Añadir un atributo de datos de los originales a artículos. (working sample - dado que no se proporcionó css, los estilos no son exactamente correctos, pero se entiende la idea).

<ul id="menu"> 
    <li><a href="#" data-slide="1">Item 1</a></li> 
    <li><a href="#" data-slide="2">Item 2</a></li> 
    <li><a href="#" data-slide="3">Item 3</a></li> 
    <li><a href="#" data-slide="4">Item 4</a></li> 
</ul><!-- end #menu --> 

A continuación, sus JS pueden extraer de identidad con el fin de mostrar los submenús asociados, correctas y contenidos.

$('#menu li a').click(function() { 

    //Fetch the value of the 'slide' data attribute of the clicked link 
    var id = $(this).data('slide'); 

    $('.submenu, .hero').hide(); 
    $('#menu li').removeClass('active'); 
    $('.submenu-'+id+', .hero-'+id).slideDown('normal'); 

}); 
$('.submenu, .hero').hide(); 

La ventaja de utilizar este método sobre algunos de los otros métodos mencionados (como .eq() o .index()) es que se puede volver a organizar el orden de los elementos de menú originales y no va a deshacerse de qué elemento de contenido se tirado. Así que este código HTML todavía funcionan perfectamente ...

<ul id="menu"> 
    <li><a href="#" data-slide="3">Item 3</a></li> 
    <li><a href="#" data-slide="1">Item 1</a></li> 
    <li><a href="#" data-slide="4">Item 4</a></li> 
    <li><a href="#" data-slide="2">Item 2</a></li> 
</ul><!-- end #menu --> 
+0

¿No debería ser esto 'diapositiva de datos'?? – m90

+0

Podría usar 'data-slide' y luego' $ (this) .data ('slide') '- daría un ligero aumento en el rendimiento, pero para 4 (o incluso 20) elementos, realmente no estamos hablando mucho Sin embargo, me resulta más fácil utilizar un atributo personalizado para volver a encontrar el elemento más adelante si es necesario, como '$ (a [slide =" 2 "])' - I ' He mezclado experiencias usando ese método con los atributos de los datos. – Dutchie432

+0

Estaba pensando val código de identificación para ser honesto – m90

1

Se puede usar jQuery .index() y .eq() como en este violín: http://jsfiddle.net/bUjud/1/
Ver: http://api.jquery.com/eq/ y http://api.jquery.com/index/

+0

+1 Buena idea y sin marcado adicional (: – peirix

+0

El uso de este método evita que vuelva a ordenar los enlaces si tal acción debería ser necesaria en el futuro. No digo que esto sea una mala idea, pero es algo a tener en cuenta. Sé que mi jefe reorganiza cosas así todo el tiempo según la época del año, o artículos populares disponibles. – Dutchie432

1

DEMO

Por esta:

<ul id="menu"> 
    <li><a href="#">Item 1</a></li> 
    <li><a href="#">Item 2</a></li> 
    <li><a href="#">Item 3</a></li> 
    <li><a href="#">Item 4</a></li> 
</ul><!-- end #menu --> 

<ul class="submenu submenu-1"> 
    <li><a href="#">Item 1.1</a></li> 
    <li><a href="#">Item 1.2</a></li> 
    <li><a href="#">Item 1.3</a></li> 
    <li><a href="#">Item 1.4</a></li> 
</ul><!-- end #submenu.submenu-item1 --> 
<ul class="submenu submenu-2"> 
    <li><a href="#">Item 2.1</a></li> 
    <li><a href="#">Item 2.2</a></li> 
    <li><a href="#">Item 2.3</a></li> 
    <li><a href="#">Item 2.4</a></li> 
</ul><!-- end #submenu.submenu-item1 --> 

<div class="hero hero-1">content 1</div> 
<div class="hero hero-2">content 2</div> 
<div class="hero hero-3">content 3</div> 
<div class="hero hero-4">content 4</div> 

Utilice esta jQuery:

$('#menu li a').click(function() { 
    var index = $('#menu li a').index(this) + 1; 
    $('.submenu, .hero').hide(); 
    $('#menu li').removeClass('active'); 
    $('.submenu-' + index + ', .hero-' + index).slideDown('normal'); 
}); 
$('.submenu, .hero').hide(); 

Y echa un vistazo jQuery.index()

Cuestiones relacionadas