jquery - 使用 jQuery 和 AJAX 在 div 层次结构中对 json 结果集进行分组
问题描述
我是 ajax 和 jquery 的新手,花了几个小时试图弄清楚似乎无法在线或其他任何地方找到解决方案。
我试图弄清楚如何(部分)将我的结果集分组到所需的输出。
我来自 ajax 的 json 结果集是:
{
"success":[
{
"id":8,
"subcategory":"SubCategory 1",
"subgroup":"Subgroup 1",
},
{
"id":9,
"subcategory":"SubCategory 1",
"subgroup":"Subgroup 2",
},
{
"id":10,
"subcategory":"SubCategory 2",
"subgroup":"Subgroup 3",
},
{
"id":11,
"subcategory":"SubCategory 2",
"subgroup":"Subgroup 4",
}
]
}
试图达到这个结果:
<div class="profiles-wrapper">
<div class="profile-block-wrapper">
<div class="profile-block-title">SubCategory 1</div>
<div class="profile-subtags-wrapper">
<a href="" class="profile-tag">Subgroup 1</a>
<a href="" class="profile-tag">Subgroup 2</a>
</div>
</div>
<div class="profile-block-wrapper">
<div class="profile-block-title">SubCategory 2</div>
<div class="profile-subtags-wrapper">
<a href="" class="profile-tag">Subgroup 3</a>
<a href="" class="profile-tag">Subgroup 4</a>
</div>
</div>
</div>
我拥有的 jquery/ajax 部分是。但是,我有点迷失从这里去哪里。
$.ajax({
type:"POST",
url:"{{url('insert-ajax')}}",
data : form_data,
success: function(data) {
$.each(data.success, function(k, v) {
$("#inserted_data").append('<div class="profile-block-wrapper" >'+v.subcategory+'</div>');
});
}
});
希望有人可以帮助我:)
解决方案
假设您的 ajax 调用返回了预期的结果,您只需要为返回的元素的实际分组添加代码。在下面的代码中,该groupByCategory
函数用于创建一个关联数组,其中键是子类别,值包含链接的 HTML。
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta charset="utf-8" />
</head>
<body>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script>
function loadData() {
data = {
"success": [{
"id": 8,
"subcategory": "SubCategory 1",
"subgroup": "Subgroup 1",
},
{
"id": 9,
"subcategory": "SubCategory 1",
"subgroup": "Subgroup 2",
},
{
"id": 10,
"subcategory": "SubCategory 2",
"subgroup": "Subgroup 3",
},
{
"id": 11,
"subcategory": "SubCategory 2",
"subgroup": "Subgroup 4",
}
]
};
var grouped = groupByCategory(data.success);
for (var k in grouped) {
$("#inserted_data").append('<div class="profile-block-wrapper" ><div class="profile-block-title">' + k + '</div><div class="profile-subtags-wrapper">' + grouped[k] + '</div></div>');
}
}
function groupByCategory(data) {
var groups = {};
$(data).each(function(k, v) {
if (!(v.subcategory in groups)) {
groups[v.subcategory] = "";
}
groups[v.subcategory] = groups[v.subcategory] + "<a href='' class='profile-tag'>" + v.subgroup + "</a>";
});
return groups;
}
$(document).ready(loadData);
</script>
<div id="inserted_data" class="profiles-wrapper">
</div>
</body>
</html>
推荐阅读
- r - 计算字符串组合的频率
- c# - 将反射属性投射到 ObservableCollection
- delphi - 滚动框鼠标滚轮delphi
- c++ - 使用 gcc 是否可以链接库,但前提是它存在?
- java - 如何从 HashMap 中的对象访问 ArrayList?JAVA
- mysql - MySQL防止插入重复字段
- java - 如何获取与作为参数传递的列表的所有值匹配的行?
- java - 如何在 Android 上创建和显示乐谱
- kubernetes - 如果我的 kubernetes Pod 有四个容器中的一个不健康容器会发生什么?
- firebase - 基于角色的身份验证取决于 google cloud firestore 规则中的组