使用jquery,从较大的一组兄弟姐妹中提取每组相邻的兄弟姐妹,匹配选择器

时间:2020-05-31 05:21:47

标签: javascript jquery jquery-selectors

我有以下标记:

<div id="parent">
    <div class="special child"></div>
    <div class="child"></div>
    <div class="child"></div>
    <div class="child"></div>
    <div class="special child"></div>
    <div class="special child"></div>
    <div class="special child"></div>
    <div class="child"></div>
    <div class="child"></div>
</div>

我需要做的是提取div.special的2个子集合(用于2组相邻的兄弟姐妹),然后将每个组与另一个父级包装在一起,最后得到:

<div id="parent">
    <div class="special_parent">
        <div class="special child"></div>
    </div>
    <div class="child"></div>
    <div class="child"></div>
    <div class="child"></div>
    <div class="special_parent">
        <div class="special child"></div>
        <div class="special child"></div>
        <div class="special child"></div>
    </div>
    <div class="child"></div>
    <div class="child"></div>
</div>

我可以首先遍历兄弟姐妹的元素并进行一些繁重的工作,但是我坚信应该有一个更优雅的方法。

1 个答案:

答案 0 :(得分:1)

使用each()nextUntil()

$('.special').each(function() {
  if ($(this).parent().hasClass('special_parent')) return
  $(this)
    .nextUntil(':not(.special)')
    .add(this)
    .wrapAll('<div class="special_parent">')
})
.special_parent {
  color: red;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<div id="parent">
  <div class="special child">1</div>
  <div class="child">2</div>
  <div class="child">3</div>
  <div class="child">4</div>
  <div class="special child">5</div>
  <div class="special child">6</div>
  <div class="special child">7</div>
  <div class="child">8</div>
  <div class="child">9</div>
  <div class="special child">10</div>
  <div class="special child">11</div>
</div>

相关问题