wrap multiple elements

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>

<div class="block">1</div>
<div>1.1</div>
<div>1.2</div>
<div>1.3</div>
<div>1.4</div>
<div class="block">2</div>
<div>2.1</div>
<div>2.2</div>
<div class="block">3</div>
<div>3.1</div>
<div>3.2</div>
<div>3.3</div>

CSS

div {
  border: 1px solid silver;
  padding: 10px;
  margin: 5px;
}

.block {
  border: 3px solid black;
}

.parent {
  border: 2px solid red;
}

JavaScript

const itemsSelector = '.block';
const wrapperTag = 'div';
const wrapperClass = 'parent';


const $items = $(itemsSelector);
$items.each(i => $items
  .eq(i)
  .nextUntil($items.get(i + 1))
  .wrapAll(`<${wrapperTag} class="${wrapperClass}">`)
);
/*
document.querySelectorAll(itemsSelector).forEach((n, i, a) => {
  const elems = [];
  for (let el = n; (el = el.nextElementSibling) != a[-~i]; elems.push(el)) ;
  n.after(document.createElement(wrapperTag));
  n.nextSibling.classList.add(wrapperClass);
  n.nextSibling.append(...elems);
});
*/