javascript - 将具有 A 类的项目分组,其前面是具有 B 类的元素
问题描述
我试图将带有类“sub”的li标签分组到一个容器()中,前提是它们之前有一个包含类“title”的元素。我能够将所有带有“sub”的连续元素包装到一个“容器”中,但仍然需要忽略第一组 subs,因为它们之前没有“title”类。
$('.sub').not('.sub+.sub').each(function(){
$(this).nextUntil(':not(.sub)').addBack().wrapAll('<div class="container" />');
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul>
<li class="sub">...</li>
<li class="sub">...</li>
<li class="sub">...</li>
<li class="sub">...</li>
<li class="title">Title</li>
<li class="sub">...</li>
<li class="sub">...</li>
<li class="sub">...</li>
<li class="sub">...</li>
<li class="title">Title</li>
<li class="sub">...</li>
<li class="sub">...</li>
<li class="sub">...</li>
<li class="sub">...</li>
</ul>
有没有办法只对前面带有“title”类的元素的项目进行分组?还考虑到可能有多个 UL,例如示例中的那个
解决方案
- 按标题查找
- 查找标题之后的所有元素,直到(不包括)下一个标题
- 用容器 div 将它们全部包裹起来
$('.title').each(function(){
$(this).nextUntil('.title').wrapAll('<div class="container">');
});
.container { color: red; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul>
<li class="sub">...</li>
<li class="sub">...</li>
<li class="sub">...</li>
<li class="sub">...</li>
<li class="title">Title</li>
<li class="sub">...</li>
<li class="sub">...</li>
<li class="sub">...</li>
<li class="sub">...</li>
<li class="title">Title</li>
<li class="sub">...</li>
<li class="sub">...</li>
<li class="sub">...</li>
<li class="sub">...</li>
</ul>
推荐阅读
- java - 从文件中获取整数值到数组
- c# - 我怎样才能让我的角色在移动时跳来跳去?
- mysql - 如何在 sequlize 中创建类似于 mysql 数据类型的列?
- python - 耦合方程组 - 来自 scipy 的 fsolve 的错误答案
- reactjs - React.js:调用 API 时在 index.js 上使用覆盖微调器
- c++ - 传递抽象 X 的子类的对象,并实例化抽象 X 的子类类型的字段
- javascript - 隐藏一个当没有给定条件时
- javascript - Discord.js 另一个嵌入的嵌入反应
- java - 无法正确拆分子字符串以进行编辑
- python - 为 python 计算器创建测试用例