2012-04-24 29 views
8

मैं एक सरल मेनू, कुछ इस तरह है: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> 

तो मैं jQuery उपयोग करती हैं इसलिए जब मैं पर क्लिक करें + हस्ताक्षर उल नीचे स्लाइड:

$("#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') नहीं करता ' टी अगले यू

किसी भी विचार को याद करने के लिए प्रतीत होता है कि मैं गलत क्या कर रहा हूं?

+0

देख सकते हैं आप 'इस्तेमाल कर सकते हैं $ (this) .find ('उल')' – Jrod

+0

नहीं है, आप इस मामले में तत्वों के वंशजों को देख सकते हैं। 'उल' तत्व के माता-पिता का भाई है। –

उत्तर

8

उपयोग

$(this).parent().next() 
बजाय

$(this).next(); 

और, ज़ाहिर है, आप एक चयनकर्ता (अधिक सरल या अधिक जटिल) है कि तर्क के रूप में वांछित तत्व की पहचान पारित कर सकते हैं:

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

मिमी .. यह अपने वर्तमान मार्कअप +1 के लिए चाल करना चाहिए। –

+0

हां। यह चाल है। धन्यवाद – Patrioticcow

3

.next/.prev भाई बहनों और उल के माध्यम से पारदर्शी अवधि के बच्चे नहीं हैं। आपको शायद निकटतम li मिलना चाहिए और .test मिलना चाहिए।

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

'.next()' और '.prev()' ** भाई बहनों के माध्यम से ट्रैवर्स **, बच्चों नहीं। –

+0

@ एंथनी क्रिस्ट आओ .. मेरा मतलब भाई बहन था लेकिन बच्चों के रूप में लिखा था। इस पर ध्यान दिलाने के लिए धन्यवाद। –