Следуя потрясающему примеру @ CMS, я опубликовал рабочий пример этого решения для JSBin.
Я придумала решение, которое позволяет вам иметь дополнительные классы на li's
и после того, как он находит правильных братьев и сестер, кэширует его для будущего использования, чтобы ускорить выполнение:
$(function(){
$("li").hover(function(){
var $this = $(this),
$cache = $this.data('hoverCache');
if(!$cache){
var category = this.className.match(/category\-.+?\b/)
$this.data('hoverCache', $this.siblings('.' + category).andSelf().addClass('hover') );
} else {
$cache.addClass('hover');
}
}, function(){
var $cache = $(this).data('hoverCache');
if($cache) $cache.removeClass('hover');
});
})
Чтобы в этом оптимизированном примере это не потерялось, вот соответствующий код на ваш вопрос:
var category = this.className.match(/category\-.+?\b/);
$(this).siblings('.' + category).andSelf();
Это находит категорию из className
(могут быть дополнительные классы), а затем находит других потомков того же родителя, используя .siblings
, а затем включает себя, так что вы можете добавить класс hover
к элементам в один раз.
Я протестировал этот код, используя Firefox и предоставленный вами HTML, и он отлично работал. Дайте мне знать, если это не то, что вам нужно!