2012-04-24 15 views
8

tôi có một menu đơn giản, một cái gì đó như thế này:cách sử dụng next() để tìm ul gần nhất trong 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> 

sau đó tôi sử dụng jquery để khi tôi bấm vào + ký ul trượt xuống:

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

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

vấn đề là $(this).next('ul') doesn' t dường như thích ul tiếp theo

bất kỳ ý tưởng nào tôi đang làm sai?

+0

Bạn có thể sử dụng '$ (this) .find ('ul')' – Jrod

+0

Không, bạn không thể.'find' nhìn vào các phần tử con cháu trong trường hợp này, 'ul' là anh chị em ruột của phần tử. –

Trả lời

8

sử dụng

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

thay vì

$(this).next(); 

và, tất nhiên, bạn có thể vượt qua một selector (hơn đơn giản hay phức tạp hơn) xác định phần tử mong muốn như là đối số:

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

mm .. điều này nên làm các trick cho đánh dấu hiện tại của mình +1. –

+0

có. nó làm các trick. cảm ơn – Patrioticcow

3

.next/.prev đi ngang qua anh chị em và ul không phải là con của nhịp. Bạn có thể tìm thấy gần nhất li và tìm thấy .test.

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

'.next()' và '.prev()' duyệt qua ** anh chị em **, không phải trẻ em. –

+0

@AnthonyGrist aaw .. tôi có nghĩa là anh chị em ruột nhưng viết là trẻ em. Cảm ơn đã chỉ ra điều đó. –

Các vấn đề liên quan