Задать вопрос
@BarneyGumble

Как выбрать каждые 4 элемента и обернуть их в тег?

Есть список элементов, следующих друг за другом. Нужно каждые 4 из них обернуть в <div class="wrap"></div>

p279Bl4tK9K5Rr.jpg

Пытался сделать так, но обернулись все элементы в один общий .wrap
$('.row-module .product-layout.product-grid:nth-child(4n-3), .row-module .product-layout.product-grid:nth-child(4n-2), .row-module .product-layout.product-grid:nth-child(4n-1), .row-module .product-layout.product-grid:nth-child(4n)').wrapAll('<div class="wrap"></div>');
  • Вопрос задан
  • 99 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
Вспомогательная функция - нарезание массивоподобного объекта на куски заданного размера:

const chunked = (data, chunkSize, slice = data.slice) =>
  Array.from(
    { length: Math.ceil(data.length / chunkSize) },
    function(_, i) {
      return this(i * chunkSize, (i + 1) * chunkSize);
    },
    (slice instanceof Function ? slice : Array.prototype.slice).bind(data)
  );

Где элементы находятся, во что и по сколько надо оборачивать:

const parentSelector = '.row-module';
const wrapperTag = 'div';
const wrapperClass = 'wrap';
const wrapSize = 4;

Оборачиваем:

for (const $n of chunked($(parentSelector).children(), wrapSize)) {
  $n.wrapAll(`<${wrapperTag} class="${wrapperClass}">`);
}

или

const parent = document.querySelector(parentSelector);
chunked(parent.children, wrapSize).forEach(n => {
  parent.append(document.createElement(wrapperTag));
  parent.lastChild.classList.add(wrapperClass);
  parent.lastChild.append(...n);
});
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы
Rocket Смоленск
от 80 000 до 130 000 ₽
Wanted. Москва
от 250 000 до 400 000 ₽
Wanted. Санкт-Петербург
До 220 000 ₽
22 янв. 2025, в 19:19
2300 руб./в час
22 янв. 2025, в 18:00
15000 руб./за проект
22 янв. 2025, в 17:57
2000 руб./в час