按字母对字母列表进行分组并将组添加到无序列表
Group alphabetic list by letter and add group to unordered list
因此我尝试使用 jQuery 对按每个列表项名称的首字母按字母顺序列出的名称列表进行分组。
我在另一个页面上使用了一个搜索过滤器,我也想重新使用它来搜索此列表。为此,我需要重组正在显示的列表。我正在使用 PHP 来解析来自 JSON 的列表,可以以原始格式显示它。目前已入榜。
<ul>
<li class="list-group-item" data-name="Achill">Achill</li>
<li class="list-group-item" data-name="Adrigole">Adrigole</li>
<li class="list-group-item" data-name="Allihies">Allihies</li>
<li class="list-group-item" data-name="Ballinaclough">Ballinaclough</li>
<li class="list-group-item" data-name="Ballydavid Head">Ballydavid Head</li>
</ul>
我尝试将其更改为以下格式:
<div class="list-header">
<div class="d-flex flex-row" data-name="A">A</div>
<ul class="list-group pmd-list pmd-card-list">
<li class="list-group-item" data-name="Achill">Achill</li>
<li class="list-group-item" data-name="Adrigole"> Adrigole </li>
<li class="list-group-item" data-name="Allihies"> Allihies </li>
</ul>
</div>
<div class="list-header">
<div class="d-flex flex-row" data-name="B">B</div>
<ul class="list-group pmd-list pmd-card-list">
<li class="list-group-item" data-name="Ballinaclough">Ballinaclough</li>
<li class="list-group-item" data-name="Ballydavid Head"> Ballydavid Head </li>
</ul>
</div>
我找到了按字母分组的代码,并将其放在每个组的顶部,并设法使部分结构正确,但我试图将列表包装成 <ul>
和另一个 <div>
但我不知所措。抱歉,我正在学习这个,所以它可能是我没有看到的东西。
我在这里 https://codepen.io/spudatron/pen/OJyjqaW 收集了到目前为止我使用某人代码尝试过的内容。
感谢任何帮助
在这个 Fiddle https://jsfiddle.net/3hm6yczh/1/
的帮助下设法解决了他们的问题
将此行 var c = $(el).attr("class");
替换为此 var c = $(el).text().charAt(0);
以按值的第一个字母而不是 Fiddle 中使用的 class 名称排序。
我这里有一个工作示例的代码笔 https://codepen.io/spudatron/pen/QWjqjYq。
$(document).ready(function(){
var lis = $("#list > li");
var as = { };
$.each(lis, function(i, el){
var c = $(el).text().charAt(0);
if(as[c] == null) {
as[c] = new Array();
}
as[c].push(el);
});
console.log(as);
$("#list").empty();
$.each(as, function(i, el) {
var li = $("<div class='list-header'><div class='d-flex flex-row' data-name="+ i.toUpperCase() +">" + i.toUpperCase() + "</div>");
var ul = $("<ul class='list-group pmd-list pmd-card-list'></ul></div>");
$(ul).append(el);
$(li).append(ul);
$("#list").append(li);
});
});
因此我尝试使用 jQuery 对按每个列表项名称的首字母按字母顺序列出的名称列表进行分组。
我在另一个页面上使用了一个搜索过滤器,我也想重新使用它来搜索此列表。为此,我需要重组正在显示的列表。我正在使用 PHP 来解析来自 JSON 的列表,可以以原始格式显示它。目前已入榜。
<ul>
<li class="list-group-item" data-name="Achill">Achill</li>
<li class="list-group-item" data-name="Adrigole">Adrigole</li>
<li class="list-group-item" data-name="Allihies">Allihies</li>
<li class="list-group-item" data-name="Ballinaclough">Ballinaclough</li>
<li class="list-group-item" data-name="Ballydavid Head">Ballydavid Head</li>
</ul>
我尝试将其更改为以下格式:
<div class="list-header">
<div class="d-flex flex-row" data-name="A">A</div>
<ul class="list-group pmd-list pmd-card-list">
<li class="list-group-item" data-name="Achill">Achill</li>
<li class="list-group-item" data-name="Adrigole"> Adrigole </li>
<li class="list-group-item" data-name="Allihies"> Allihies </li>
</ul>
</div>
<div class="list-header">
<div class="d-flex flex-row" data-name="B">B</div>
<ul class="list-group pmd-list pmd-card-list">
<li class="list-group-item" data-name="Ballinaclough">Ballinaclough</li>
<li class="list-group-item" data-name="Ballydavid Head"> Ballydavid Head </li>
</ul>
</div>
我找到了按字母分组的代码,并将其放在每个组的顶部,并设法使部分结构正确,但我试图将列表包装成 <ul>
和另一个 <div>
但我不知所措。抱歉,我正在学习这个,所以它可能是我没有看到的东西。
我在这里 https://codepen.io/spudatron/pen/OJyjqaW 收集了到目前为止我使用某人代码尝试过的内容。
感谢任何帮助
在这个 Fiddle https://jsfiddle.net/3hm6yczh/1/
的帮助下设法解决了他们的问题将此行 var c = $(el).attr("class");
替换为此 var c = $(el).text().charAt(0);
以按值的第一个字母而不是 Fiddle 中使用的 class 名称排序。
我这里有一个工作示例的代码笔 https://codepen.io/spudatron/pen/QWjqjYq。
$(document).ready(function(){
var lis = $("#list > li");
var as = { };
$.each(lis, function(i, el){
var c = $(el).text().charAt(0);
if(as[c] == null) {
as[c] = new Array();
}
as[c].push(el);
});
console.log(as);
$("#list").empty();
$.each(as, function(i, el) {
var li = $("<div class='list-header'><div class='d-flex flex-row' data-name="+ i.toUpperCase() +">" + i.toUpperCase() + "</div>");
var ul = $("<ul class='list-group pmd-list pmd-card-list'></ul></div>");
$(ul).append(el);
$(li).append(ul);
$("#list").append(li);
});
});