2012-04-24 7 views
8

Ho un menu semplice, qualcosa di simile:come usare next() per trovare l'ul più vicino in 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> 

allora io uso jQuery così quando clicco sul + firmare il ul scivola verso il basso:

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

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

il problema è che $(this).next('ul') doesn' t mi piace affascinare il prossimo ul

qualche idea cosa sto facendo di sbagliato?

+0

Si potrebbe utilizzare '$ (this) .find ('ul')' – Jrod

+0

No, non è possibile "guardare" i discendenti degli elementi mentre in questo caso, "ul" è il fratello del genitore dell'elemento. –

risposta

8

uso

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

anziché

$(this).next(); 

e, naturalmente, è possibile passare un selettore (più semplice o più complessa) che identifica l'elemento desiderato come argomento:

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

mm .. questo dovrebbe fare il trucco per il suo attuale markup +1. –

+0

sì. fa il trucco. grazie – Patrioticcow

3

.next/.prev attraversare tra fratelli e ul non è un figlio della campata. Probabilmente dovresti trovare il più vicino li e trovare .test.

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

'.next()' e '.prev()' attraversa ** i fratelli **, non i bambini. –

+0

@AnthonyGrist aaw ... volevo dire fratelli, ma ho scritto da bambini. Grazie per segnalarlo. –