如何包装所有下一个元素直到?

时间:2015-02-15 14:20:20

标签: javascript jquery html wrapall

我有以下html:

<div class="menuItem">Domů</div>
<div class="menuItem">O nás</div>
<div class="menuItem">Výzkum a vývoj</div>
<div class="submenuItem"><b>Aplikace aktivního gumového prášku</b>
</div>
<div class="submenuItem"><b>Odprašky</b>
</div>
<div class="submenuItem"><b>Guma</b>
</div>
<div class="submenuItem"><b>Zemědělství</b>
</div>
<div class="submenuItem"><b>Potravinářství</b>
</div>
<div class="menuItem">Projekční činnost</div>
<div class="menuItem">Realizace</div>
<div class="submenuItem"><b>realizace podstránka</b>
</div>
<div class="menuItem">Kontakty</div>

我想要实现的目标是将每个.menuItem和所有下一个.submenuItem.menuSet打包在一起。不幸的是,以下js包装整个片段而不是上面定义的集合。

<div class="menuItem">Domů</div>
<div class="menuItem">O nás</div>
<div class="menuItem">Výzkum a vývoj</div>
<div class="submenuItem"><b>Aplikace aktivního gumového prášku</b>
</div>
<div class="submenuItem"><b>Odprašky</b>
</div>
<div class="submenuItem"><b>Guma</b>
</div>
<div class="submenuItem"><b>Zemědělství</b>
</div>
<div class="submenuItem"><b>Potravinářství</b>
</div>
<div class="menuItem">Projekční činnost</div>
<div class="menuItem">Realizace</div>
<div class="submenuItem"><b>realizace podstránka</b>
</div>
<div class="menuItem">Kontakty</div>

为了让我的意图更容易理解,下面我发布了所需的结果:

$(".menuItem").nextUntil(".menuItem").andSelf().wrapAll("<div class='menuSet'></div>");
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="menuSet">
  <div class="menuItem">Domů</div>
</div>
<div class="menuSet">
  <div class="menuItem">O nás</div>
</div>
<div class="menuSet">
  <div class="menuItem">Výzkum a vývoj</div>
  <div class="submenuItem"><b>Aplikace aktivního gumového prášku</b>
  </div>
  <div class="submenuItem"><b>Odprašky</b>
  </div>
  <div class="submenuItem"><b>Guma</b>
  </div>
  <div class="submenuItem"><b>Zemědělství</b>
  </div>
  <div class="submenuItem"><b>Potravinářství</b>
  </div>
</div>
<div class="menuSet">
  <div class="menuItem">Projekční činnost</div>
</div>
<div class="menuSet">
  <div class="menuItem">Realizace</div>
  <div class="submenuItem"><b>realizace podstránka</b>
  </div>
</div>
<div class="menuSet">
  <div class="menuItem">Kontakty</div>
</div>

1 个答案:

答案 0 :(得分:3)

当您选择所有menuItem&c;而不是从那里过滤时,wrapAll将包装您的整个集合。

要解决这个问题,一种方法是使用$.each()并遍历menuItems而不是包装它们。

$(".menuItem").each(function (index) {
    $(this).nextUntil(".menuItem").andSelf().wrapAll("<div class='menuSet'></div>");
});

JSFiddle Demo

相关问题