次のような「アイテム」のコレクションがあるとしましょう。
<p class="item">Item 1</p>
<p class="item">Item 2</p>
<p class="item group">Item 3</p>
<p class="item group">Item 4</p>
<p class="item">Item 5</p>
アイテムをループして、「グループ」クラスを持つすべてのアイテムを含む div をラップして、次のようにします (グループ化されたアイテムは常に隣り合っています)。
これは私が持っているスクリプトです:
var group = [];
$('.item').each(function(i, item) {
if ($(item).hasClass('group')) {
group.push(item);
}
});
$(group).wrap('<div class="wrapper" />');
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<p class="item">Item 1</p>
<p class="item">Item 2</p>
<div class="wrapper">
<p class="item group">Item 3</p>
<p class="item group">Item 4</p>
</div>
<p class="item">Item 5</p>
何が起こるかというと、ラッピング div は配列内の各要素を個別にラップします (これは理にかなっています) が、すべての要素を一緒にラップする必要があります。これを行う方法はありますか?ここにjsFiddleがあります。
この問題には、より複雑なバリエーションが考えられます。これは、これらのグループの「セット」がいくつかあり、それぞれが独自の「グループ」にラップされる状況div
です。初期状態:
<p class="item">Item 1</p>
<p class="item">Item 2</p>
<p class="item group">Item 3</p>
<p class="item group">Item 4</p>
<p class="item">Item 5</p>
<p class="item group">Item 6</p>
<p class="item group">Item 7</p>
<p class="item group">Item 8</p>
<p class="item">Item 9</p>
望ましい状態:
<p class="item">Item 1</p>
<p class="item">Item 2</p>
<div class="wrapper">
<p class="item group">Item 3</p>
<p class="item group">Item 4</p>
</div>
<p class="item">Item 5</p>
<div class="wrapper">
<p class="item group">Item 6</p>
<p class="item group">Item 7</p>
<p class="item group">Item 8</p>
</div>
<p class="item">Item 9</p>