@AndreyBLG

Как сделать выборку jquery и обернуть выбранное в дополнительный div?

Приветствую!
Уважаемые, помогите с помощью jquery оформить вложенный список, следующим образом.
Прошу простить за использование JQ, не знаю возможно ли такое в стандартном меню WP.
Забегая вперед, для экспериментов подготовил codepen

Итак, структура такая.
Обратите внимание, некоторые li имеют class="sub-rubriс" - они как бы делят следующие за ними li на подрубрики, "по цене", "по стилю", "по назначению" и т.д.
Следом за ними (до следующего li class="sub-rubriс") идут li БЕЗ класса "sub-rubriс" и в каждой группе "sub-rubriс" количество элементов li разное!

<ul class="menu">
	<li class="menu-item-has-children">
		<a href="http://xxx/kitchens/">Кухни</a>
		<ul class="sub-menu">

			<li class="sub-rubriс menu-item"><a href="#">ПО ЦЕНЕ</a></li>
			<li class="menu-item"><a href="/link/">Эконом</a></li>

			<li class="sub-rubriс menu-item"><a href="#">ПО СТИЛЮ</a></li>
			<li class="menu-item"><a href="/link/">Хай-тек</a></li>
			<li class="menu-item"><a href="/link/">Современные</a></li>
			<li class="menu-item"><a href="/link/">Классические</a></li>
			<li class="menu-item"><a href="/link/">Маленькие</a></li>

			<li class="sub-rubriс menu-item"><a href="#">ПО НАЗНАЧЕНИЮ</a></li>
			<li class="menu-item"><a href="/link/">С барной стойкой</a></li>
			<li class="menu-item"><a href="/link/">С островом</a></li>

			<li class="sub-rubriс menu-item"><a href="#">ПО ЦВЕТУ</a></li>
			<li class="menu-item"><a href="/link/">Зеленая</a></li>

			<li class="sub-rubriс menu-item"><a href="#">ПО МАТЕРИАЛУ</a></li>
			<li class="menu-item"><a href="/link/">Из пластика</a></li>
			<li class="menu-item"><a href="/link/">Из массива</a></li>

			<li class="sub-rubriс menu-item"><a href="#">ПО ФОРМЕ</a></li>
			<li class="menu-item"><a href="/link/">Угловые</a></li>
			<li class="menu-item"><a href="/link/">Прямые</a></li>
			<li class="menu-item"><a href="/link/">Радиусные</a></li>
		</ul>
	</li>
</ul>


Задача, с помощью jquery поделить все подрубрики "sub-rubriс", добавить к каждой такой группе div wrapper, т.е. выбрать и обернуть их, например в div class sub-rubrik-wrap.
Чтобы получилось вот так:

<ul class="menu">
	<li class="menu-item-has-children">
		<a href="http://xxx/kitchens/">Кухни</a>
		<ul class="sub-menu">

			<div class="sub-rubrik-wrap"
				<li class="sub-rubrik menu-item"><a href="#">ПО ЦЕНЕ</a></li>
				<li class="menu-item"><a href="/link/">Эконом</a></li>
			</div>

			<div class="sub-rubrik-wrap"
				<li class="sub-rubrik menu-item"><a href="#">ПО СТИЛЮ</a></li>
				<li class="menu-item"><a href="/link/">Хай-тек</a></li>
				<li class="menu-item"><a href="/link/">Современные</a></li>
				<li class="menu-item"><a href="/link/">Классические</a></li>
				<li class="menu-item"><a href="/link/">Маленькие</a></li>
			</div>

			<div class="sub-rubrik-wrap"
				<li class="sub-rubrik menu-item"><a href="#">ПО НАЗНАЧЕНИЮ</a></li>
				<li class="menu-item"><a href="/link/">С барной стойкой</a></li>
				<li class="menu-item"><a href="/link/">С островом</a></li>
			</div>

			<div class="sub-rubrik-wrap"
				<li class="sub-rubrik menu-item"><a href="#">ПО ЦВЕТУ</a></li>
				<li class="menu-item"><a href="/link/">Зеленая</a></li>
			</div>

			<div class="sub-rubrik-wrap"
				<li class="sub-rubrik menu-item"><a href="#">ПО МАТЕРИАЛУ</a></li>
				<li class="menu-item"><a href="/link/">Из пластика</a></li>
				<li class="menu-item"><a href="/link/">Из массива</a></li>
			</div>

			<div class="sub-rubrik-wrap"
				<li class="sub-rubrik menu-item"><a href="#">ПО ФОРМЕ</a></li>
				<li class="menu-item"><a href="/link/">Угловые</a></li>
				<li class="menu-item"><a href="/link/">Прямые</a></li>
				<li class="menu-item"><a href="/link/">Радиусные</a></li>
			</div>
		</ul>
	</li>
</ul>


Спасибо!
  • Вопрос задан
  • 246 просмотров
Решения вопроса 1
Emptyform
@Emptyform
Думаю, должно существовать более изящное решение, но пока вот так:
while ($('.sub-menu > .sub-rubriс').length > 0) {
    $('.sub-menu > .sub-rubriс:first')
        .nextUntil('.sub-rubriс')
        .add($('.sub-menu > .sub-rubriс:first'))
        .wrapAll('<div class="sub-rubrik-wrap"></div>');
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы