Оберните соседние элементы с тем же классом

Мне нужно обернуть соседние элементы одним классом в div, используя jQuery. Пока я использую функцию .wrapAll для обертывания элементов с тем же классом в div.

HTML:

<a class="image"></a>
<a class="image"></a>
<a class="image"></a>
<p>Some text</p>
<a class="image"></a>
<a class="image"></a>

Script:

$( "a.image" ).wrapAll( "<div class='gallery'></div>" );

Вывод:

<div class='gallery'>
    <a class="image"></a>
    <a class="image"></a>
    <a class="image"></a>
    <p>Some text</p>
    <a class="image"></a>
    <a class="image"></a>
</div>

Однако мне нужно обернуть элементы рядом классом 'image' в отдельные divs с классом 'galley'. Поэтому вывод должен выглядеть следующим образом:

<div class='gallery'>
    <a class="image"></a>
    <a class="image"></a>
    <a class="image"></a>
</div>
<p>Some text</p>
<div class='gallery'>
    <a class="image"></a>
    <a class="image"></a>
</div>

Есть ли способ сделать это с помощью jQuery?

Ответ 1

  • Вы получаете не соседние изображения (первый и тот же после p) с помощью функции .not.
  • Для каждого из них вы собираете соседнее изображение, используя (.nextUntil и andSelf).
  • Наконец, вы завершаете их все, используя .wrapAll

$('.image').not('.image+.image').each(function(){
  $(this).nextUntil(':not(.image)').andSelf().wrapAll('<div class="gallery" />');
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a class="image">1</a>
<a class="image">2</a>
<a class="image">3</a>
<p>Some text</p>
<a class="image">4</a>
<a class="image">5</a>