2012-04-24 68 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

相关问题