Вспомогательная функция - нарезание массивоподобного объекта на куски заданного размера:
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);
});