列出按字母顺序排列的 javascript 和字母标题
Lists alphabetical ordered by javascript with letter headings
我有这样的列表:
<ul id="list">
<li><a href="/">Adam</a></li>
<li><a href="/">Alex</a></li>
...
<li><a href="/">Zara</a></li>
</ul>
它已经按这个 JavaScript 的字母顺序排序了:
var mylist = $('#list');
var listitems = mylist.children('li').get();
listitems.sort(function(a, b) {
return $(a).text().toUpperCase().localeCompare($(b).text().toUpperCase());
})
$.each(listitems, function(idx, itm) { mylist.append(itm); });
现在我需要像这样设置列表:
<ul id="list">
<li id="a"><a name="a" class="title">A</a>
<ul>
<li><a href="/">Adam</a></li>
<li><a href="/">Alex</a></li>
</ul>
</li>
<li id="b"><a name="b" class="title">B</a>
<ul>
<li><a href="/">Barry</a></li>
<li><a href="/">Becky</a></li>
</ul>
</li>
...
...
...
<li id="z"><a name="z" class="title">z</a>
<ul>
<li><a href="/">zavv</a></li>
<li><a href="/">zora</a></li>
</ul>
</li>
</ul>
以使用此 Apple 样式滑块中的列表。
你知道我如何使用 JavaScript 来做到这一点吗?
最简单的(我猜)首先收集对象中的所有li
元素(根据其内容的首字母分类),然后分别对这些列表进行排序。由于代码说了一千多个单词,以下是我的做法:
var list = { letters: [] }; //object to collect the li elements and a list of initial letters
$("#list").children("li").each(function(){
var itmLetter = $(this).text().substring(0,1).toUpperCase();
if (!(itmLetter in list)) {
list[itmLetter] = [];
list.letters.push(itmLetter);
}
list[itmLetter].push($(this)); //add li element to the letter's array in the list object
});
list.letters.sort(); //sort all available letters to iterate over them
$.each(list.letters, function(i, letter){
list[letter].sort(function(a, b) {
return $(a).text().toUpperCase().localeCompare($(b).text().toUpperCase()); //sort li elements of one letter
});
var ul = $("<ul/>"); //create new dom element and add li elements
$.each(list[letter], function(idx, itm){
ul.append(itm);
});
$("#list").append($("<li/>").append($("<a/>").attr("name", letter.toLowerCase()).addClass("title").html(letter)).append(ul)); //add the list to a new li and to #list ul
});
JSFiddle: http://jsfiddle.net/KnC6M/
谢谢@Aletheios,我更新了您的解决方案,使其通过使用css
更高效的解决方案,而无需删除列表$("#list").empty();
假设您的列表已经排序。
var letters = [];
$("#list").children("li").each(function(i){
var itmLetter = $(this).text().trim().substring(0,1).toUpperCase();
if (letters.indexOf(itmLetter)<0) {
console.log(`${itmLetter} is not in ${letters} and index is ${i}`);
$(`#list li:nth-child(${i+1})`).addClass("AddContent").attr('data-content',itmLetter);
letters.push(itmLetter);
} else {
console.log(`${itmLetter} is in ${letters}`);
}
});
.CSS:
#list{
margin-left: 15px;
}
li.AddContent:before {
content: attr(data-content);
margin-left: -15px;
display: block;
}
.HTML:
<ul id="list">
<li><a href="/"> Zara</a></li>
<li><a href="/"> Adam</a></li>
<li><a href="/"> Alex</a></li>
<li><a href="/"> Toby</a></li>
</ul>
JSfiddle: http://jsfiddle.net/KnC6M/105/
我正在寻找类似的东西,我想按字母顺序分组对数组进行排序。这是我的代码,它是@Aletheios代码的修改版本。希望对您有所帮助。
var list = { letters: [] };
var words = {let: ['abc', 'aabbgg', 'cda', 'hello', 'bca']};
$.each(words.let, function(){
var itLetter = this.substring(0,1).toUpperCase();
if(!(itLetter in list)){
list[itLetter] = [];
list.letters.push(itLetter);
}
list[itLetter].push($(this));
});
list.letters.sort();
$.each(list.letters, function(i, letter){
var ul = $("<ul/>");
var li = $('<li/>');
$.each(list[letter], function(idx, itm){
ul.append('<li>'+ itm[0] +'</li>');
console.log(itm);
});
$("body").append($("<li/>").append($("<a/>").attr("name", letter.toLowerCase()).addClass("title").html(letter)).append(ul));
});
这是小提琴。http://jsfiddle.net/checkomkar/x8taqcnk/
相关文章:
- 在PHP中使用javascript更改页面标题'if'
- 使用JavaScript将标题文本替换为按钮文本
- 如何使用javascript更改网页的标题
- 无标题Javascript JSON数组->CSV导出
- HTML/JavaScript表格标题
- 您可以更改javascript确认上的按钮标题吗
- JavaScript正则表达式来提取标题内容
- 如何使用JavaScript在HTML标题中正确插入unicode
- JavaScript-在img标题匹配后删除类
- 如何使用javascript只加载mp3文件标题
- 如何点击标题中的链接,然后返回HTML、Javascript和CSS
- 用Javascript替换图像和图像标题/alt文本
- JavaScript-从匹配的img标题中删除Class
- 如何在 javascript 替换新图像/标题后正确显示 css 工具提示
- 在javascript中访问当前页面的页面标题[no ajax]
- Javascript 将 unicode 字符串转换为“标题大小写”
- 列出按字母顺序排列的 javascript 和字母标题
- javascript按集合中的标题搜索节点并返回
- Javascript标题闪烁方法
- 我如何使用简单的子字符串函数在javascript标题大小写句子