2012-04-24 42 views
8

我有一個簡單的菜單,這樣的事情:如何使用next()在jQuery中查找最接近的ul?

<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> 

然後使用jQuery所以當我點擊+簽署UL下滑:

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

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

的問題是,$(this).next('ul')沒有按」 t似乎喜歡未來ul

任何想法我做錯了什麼?

+0

你可以使用'$(本).find( 'UL')' – Jrod 2012-04-24 18:42:46

+0

沒有,你不能.'find'查看元素的後代,而在這種情況下,'ul'是元素的父代的兄弟。 – 2012-04-24 19:58:52

回答

8

使用

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

代替

$(this).next(); 

,當然,可以通過一個選擇器(更簡單或更復雜的),其識別所期望的元素作爲參數:

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

毫米..這應該爲他目前的標記+1做訣竅。 – 2012-04-24 18:47:12

+0

是的。它的伎倆。謝謝 – Patrioticcow 2012-04-24 18:47:30

3

.next/.prev穿過兄弟姐妹和ul不是跨度的孩子。您應該找到最接近的li並找到.test

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

'.next()'和'.prev()'遍歷**兄弟**,而不是孩子。 – 2012-04-24 18:52:19

+0

@AnthonyGar aaw ..我的意思是兄弟姐妹,但寫作孩子。感謝您指出。 – 2012-04-24 18:53:45