.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'});