jquery - jQuery:在两组列表中查找匹配的属性值,然后相应地移动单个列表项
问题描述
我正在使用两种不同类别的无序列表(Categories类和Sections类)。类别列表中的每个<li>
实例都有一个带有特定数值分配的“catid”属性。Sections 列表中的每个<li>
实例都有一个带有特定数值分配的“categoryid”属性。下面的简短代码片段说明了这种结构:
<ul id = "categories">
<li class="cat" catid="360002254991"><a>Category A</a></li>
<li class="cat" catid="360002255011"><a>Category B</a></li>
</ul>
<ul id="sections">
<li class="sec" secid="360008584672" categoryid="360002246652"><a href="https://myURL">Section 1</a></li>
<li class="sec" secid="360007912231" categoryid="360002255011"><a href="https://myURL">Section 2</a></li>
</ul>
我需要一种编程方式来查看<li>
两个父无序列表(类别/部分)中的所有实例,并找到“catid”值和“categoryid”值之间的所有匹配项。
找到匹配项后,我将需要移动每个部分列表项(“sec”类),使其直接位于匹配的类别列表项(“cat”类)下方。我假设这将通过insertAfter方法来完成。
用“逻辑”术语重申我的挑战:我需要比较两个集合(类别和部分)的所有成员,以识别两个不同属性(“catid”和“categoryid”)之间的匹配数值。一旦确定了匹配项,我就需要从 Section 集中移动所有成员,以便每个成员直接位于 Category 集中匹配成员的下方。
我明白了逻辑,我只是不知道确切的编码语法以及如何构造运行比较所需的条件 jQuery 语句,然后<li>
相应地移动项目。
提前感谢您在此处提供的任何帮助。
解决方案
你可以这样做:
$(".sec").each(function() {
let catid = $(this).attr("categoryid");
$(".cat").each(function() {
if ($(this).attr("catid") == catid) {
$(".sec[categoryid=" + catid + "]").insertAfter($(".cat[catid=" + catid + "]"));
}
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul id="categories">
<li class="cat" catid="360002254991"><a>Category A</a></li>
<li class="cat" catid="360002255011"><a>Category B</a></li>
</ul>
<ul id="sections">
<li class="sec" secid="360008584672" categoryid="360002246652"><a href="https://myURL">Section 1</a></li>
<li class="sec" secid="360007912231" categoryid="360002255011"><a href="https://myURL">Section 2</a></li>
</ul>
推荐阅读
- php - 使用 cron 执行 shell 命令的奇怪 PHP 行为
- javascript - 如何删除 redux-form 中的特定字段值
- postgresql - 分区后插入主表的数据
- excel - 基于具有重复值的另一列合并和居中单元格
- javascript - 类型错误:调用 this.$q.electron.clipboard 时无法读取未定义的属性“剪贴板”
- sas - 如何用数据集中的SAS中的另一行值替换值
- java - 点燃扫描查询问题
- c# - 避免在 API 输出 XML 文档中出现两次循环
- javascript - 如何使用 react 或 javascript 根据其内容向 span 标签添加不同的样式?
- c# - 等待异步任务结束