2012-04-24 15 views
8

Tengo un menú sencillo, algo como esto:cómo usar next() para encontrar la UL más cercana en jquery?

<ul id="navigation"> 
    <li id="m_li"> 
     <div><span>+</span><a href="#" >myself</a></div> 
     <ul class="test" id="x_ul"> 
      <li id="li"> 
       <a href="#" >Pictures</a> 
      </li> 
      <li id="li"> 
       <a href="#" >Audio</a> 
      </li> 
     </ul> 
    </li> 
    <li id="profile_modeling_li"> 
     <div><span>+</span><a href="#" >friend</a></div> 
     <ul class="test" id="y_ul"> 
      <li id="li"> 
       <a href="#" >Pictures</a> 
      </li> 
      <li id="li"> 
       <a href="#" >Video</a> 
      </li> 
     </ul> 
    </li> 
</ul> 

entonces yo utilizo jQuery así que cuando hago clic en el + firmar el ul desliza hacia abajo:

$("#navigation > li > div > span").click(function(){ 

    if(false == $(this).next('ul').is(':visible')) { 
     $('#accordion ul').slideUp(300); 
    } 
    $(this).next('ul').slideToggle(300); 
}); 

el tema es que $(this).next('ul') doesn' t parece aficionado a la siguiente ul

alguna idea ¿qué estoy haciendo mal?

+0

Se podría usar '$ (this) .find ('ul')' – Jrod

+0

No, no se puede encontrar. Busca en los elementos descendientes, mientras que en este caso, el 'ul' es el hermano del elemento primario. –

Respuesta

8

uso

$(this).parent().next() 

en lugar de

$(this).next(); 

y, por supuesto, se puede pasar un selector (más simple o más compleja) que identifica el elemento deseado como argumento:

$(this).parent().next('ul.test[id$="_ul]"'); 
+0

mm .. esto debería hacer el truco para su marcado actual +1. –

+0

sí. hace el truco gracias – Patrioticcow

3

.next/.prev atraviesa a través de hermanos y ul no es un hijos de la envergadura. Probablemente deberías encontrar el más cercano li y encontrar .test.

$(this).closest('li').find('ul.test') 
+1

'.next()' y '.prev()' atraviesa ** hermanos ", no niños. –

+0

@AnthonyGrist aaw ... me refiero a hermanos pero escribí de niños. Gracias por mencionarlo. –

Cuestiones relacionadas