Добавляем классы к дочерним элементам «одноуровневого» списка

Проблема в том, что есть список, с дочерними списками, но из-за сложности структуры CMS, эти дочерние списки не являются вложенными ul > ul, их структура выглядит примерно так

<ul Class="sidebar-menu">
  <li class="item has-submenu">Campaign 1</li>
  <li class="subitem active"><a >Child 1 Campaign 1</a></li>
  <li class="subitem"><a>Child 2 Campaign 1</a></li>

  <li class="item has-submenu">Campaign 2</li>
  <li class="subitem"><a>Child 1 Campaign 2</a></li>
  <li class="subitem"><a>Child 2 Campaign 2</a></li>

  <li class="item has-submenu">Campaign 3</li>
  <li class="subitem"><a>Child 1 Campaign 3</a></li>
  <li class="subitem"><a>Child 2 Campaign 3</a></li>
</ul>

Нужно, чтобы при активном дочернем элементе, всем его соседним элементам одного родителя задавался класс active-menu.

Такой скрипт решает эту проблему:

var $liMenu = $(".sidebar-menu li");
var $activeMenu = $(".sidebar-menu li.active");
var $ind = $activeMenu.index();
var prev = 0;

$activeMenu.addClass('active-menu');
$activeMenu.prevUntil('.has-submenu').addClass('active-menu');
$activeMenu.nextUntil('.has-submenu').addClass('active-menu');

for ( var i = $ind; i > 0; i--){
  if ( prev == 0 ) {
    if ( $liMenu.eq($ind).prev().hasClass("has-submenu") ) {
      $liMenu.eq($ind).prev().addClass('active-menu');
      prev = $ind-1;
      break;
    } else {
      prev = $ind-1;
    }
  } 
  else {
    if ( $liMenu.eq(prev).prev().hasClass("has-submenu") ) {
      $liMenu.eq(prev).prev().addClass('active-menu');
      prev = prev-1;
      break;
    } else {
      prev = prev-1;
    }
  }
}

За помощь благодарность Algiz’у.

Open Graph — метатеги, которые помогают вывести нужную информацию при публикации ссылки на сайт в социальных сетях

Стандарт Open Graph разработан социальной сетью Facebook. Он позволяет контролировать превью, которое формируется при публикации…

Делаем динамическую гистограмму с использованием JS и jQuery

[vc_row][vc_column][vc_column_text]Задача такая: необходимо сделать вывод на каждой странице гистограммы с оценками. Всего 5 баллов, за…

Добавляем градиент в sass через миксины или с помощью bourbon

Для того, чтобы не прописывать градиенты с вендорными префиксами для каждого элемента, достаточно использовать миксины…

Делаем попап без плагина fancybox

Цель — сделать pop-up окно без использования Fancybox. В общем, его можно сделать даже без…

Ответить