Right... I need to find all < ul style=\"display: block;\"> elements, so that I can set it do display:none.
I think I\'m on the right path here... but not quite t
You may be able to use the attribute selectors, and the 'contains' option
$('#adminMenu li ul[style*="display:block"]').hide()
This essentially says 'any ul who's style attribute contains the text display:block'
$('#adminMenu li').find("ul:visible").css('display', 'none');
or
$('#adminMenu li').find("ul:visible").hide();
or
$('#adminMenu li ul:visible').hide();
to name a few ways
That's tricky as stated but is solvable other ways. The easiest is:
$("#adminMenu li ul:visible").hide();
assuming items are either hidden or not. Of course, considering you want to hide them all why not just:
$("#adminMenu li ul").hide();
Try and avoid changing CSS style directly. It's problematic. It's hard to reverse and as you're discovering hard to search for. Use a class instead:
#adminMenu li ul { display: none; }
ul.block { display: block; }
with:
$("#adminMenu li ul").removeClass("block");
or
$("#adminMenu li ul.block").removeClass("block");
Don't know how to do it in one line, but here's how you can do it in a couple more:
jQuery('#adminMenu li').find("ul").each(function (){
if($(this).css("display") == "block"){
// do something
}
});
If what you want is to handle all visible elements (instead of only the display: block
ones), you could try the :visible
selector instead.
You can use filter. (http://api.jquery.com/filter/)
So you can do as below.
$('ul').filter(function() {
return $(this).css('display') == 'block';
});
You coud use the fadeOut() or slideUp() methods for a visual effect:
jQuery('#adminMenu li').find("ul").fadeOut('fast');
jQuery('#adminMenu li').find("ul").slideUp('fast');