how to use next() to find the closest ul in jquery?
41,313
Solution 1
use
$(this).parent().next()
instead of
$(this).next();
and, of course, you can pass a selector (more simple or more complex) that identifies the desired element as argument:
$(this).parent().next('ul.test[id$="_ul]"');
Solution 2
.next / .prev
traverse through siblings and ul is not a children of the span. You should probably find closest li
and find .test
.
$(this).closest('li').find('ul.test')
Solution 3
Convert
$(this).next('ul')
to
$(this).parent().next('ul')
You can see here http://jsfiddle.net/PYqS2/
Comments
-
Patrioticcow almost 2 years
i have a simple menu, something like this:
<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>
then i use jquery so when i click on the
+
sign the ul slides down:$("#navigation > li > div > span").click(function(){ if(false == $(this).next('ul').is(':visible')) { $('#accordion ul').slideUp(300); } $(this).next('ul').slideToggle(300); });
the issue is that
$(this).next('ul')
doesn't seem to fond the next ulany ideas what am i doing wrong?
-
Anthony Grist about 12 years
.next()
and.prev()
traverse through siblings, not children. -
Selvakumar Arumugam about 12 years@AnthonyGrist aaw.. i meant siblings but wrote as children. Thanks for pointing it out.