.prev() .prevAll() .prevUntil()
by bizamajig
HTML
<ul>
<li class="par_cat"></li>
<li class="sub_cat">sub cat</li>
<li class="sub_cat">sub cat</li>
<li class="par_cat">par cat - The element we want</li>
<li class="sub_cat">sub cat</li>
<li class="sub_cat">sub cat - Immediate previous, the only element the jquery checks </li>
<li class="sub_cat current_sub"> current sub - starting point</li> // this is where I need to start searching
<li class="par_cat"></li>
<li class="sub_cat"></li>
<li class="par_cat"></li>
</ul>
JavaScript
// show blue if it matches the element we want
$('li.current_sub').prevAll('.par_cat').css({'border':'1px solid #000','background':'#1cf'});
var category = $('li.current_sub').prev('li.par_cat');
if (category.length == 0){
category = $('li.current_sub').prevUntil('li.par_cat').last().prev();
}
category.css({'border':'1px solid #000','background':'#aaf'});
// PLAY WITH :first and :last, WE SEARCH IN DIRECTION AND FIRST/LAST ARE CORRECT!
// Show red if it only matches the preceding element
$('li.current_sub').prevAll('.sub_cat:first').css({'border':'1px solid #faa','background':'#faa'});