2012-04-24 17 views
8

Mam proste menu, coś takiego:jak użyć next(), aby znaleźć najbliższy ul w 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> 

następnie użyć jQuery więc kiedy klikam na + podpisać ul ześlizguje:

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

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

kwestia jest taka, że ​​$(this).next('ul') robi” Wydaje się, że lubicie następne ul

wszelkie pomysły, co robię źle?

+0

Można użyć '$ (this) .find ('ul')' – Jrod

+0

Nie, nie można "patrzeć" na elementy potomków, podczas gdy w tym przypadku "ul" jest rodzeństwem rodzica elementu. –

Odpowiedz

8

zastosowanie

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

zamiast

$(this).next(); 

i, oczywiście, można zdać selektor (prostsze lub bardziej złożone), który identyfikuje wybrany element jako argument:

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

mm .. powinno to wystarczyć dla jego obecnego markup +1. –

+0

tak. to działa. dzięki – Patrioticcow

3

.next/.prev przechodzenie przez rodzeństwo i ul nie jest dzieci w zakresie. Prawdopodobnie powinieneś znaleźć najbliższy li i znaleźć .test.

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

'.next()' i '.prev()' przechodzą przez ** rodzeństwo **, a nie dzieci. –

+0

@AnthonyGrist Aaw .. Miałem na myśli rodzeństwo, ale pisałem jako dzieci. Dziękuję za wskazanie. –