我想按列表项的内容对无序列表进行排序。默认情况下,我希望它按日期排序,并可以选择按名称的字母顺序排序。
<select id="test">
<option selected="selected" value="date">Date</option>
<option value="alphabetically">Alphabetically</option>
</select>
<ul id="list">
<li><p class="name">Peter</p><span class="date">10.12.12</span></li>
<li><p class="name">Mary</p><span class="date">06.01.13</span></li>
<li><p class="name">Paul</p><span class="date">19.12.12</span></li>
<li><p class="name">Allen</p><span class="date">21.12.12</span></li>
<li><p class="name">James</p><span class="date">03.01.13</span></li>
<li><p class="name">Vicki</p><span class="date">12.01.13</span></li>
<li><p class="name">Brock</p><span class="date">01.01.13</span></li>
<li><p class="name">Dana</p><span class="date">31.12.12</span></li>
<li><p class="name">Frank</p><span class="date">16.12.12</span></li>
<li><p class="name">Gil</p><span class="date">09.01.13</span></li>
<li><p class="name">Helen</p><span class="date">14.01.13</span></li>
</ul>我到目前为止的尝试是:
function sortUnorderedList(ul, sortDescending) {
if (typeof ul == "string") ul = document.getElementById(ul);
var lis = ul.getElementsByTagName("li");
var vals = [];
for (var i = 0, l = lis.length; i < l; i++)
vals.push(lis[i].innerHTML);
vals.sort();
if (sortDescending) vals.reverse();
for (var i = 0, l = lis.length; i < l; i++)
lis[i].innerHTML = vals[i];
}
$(document).ready(function () {
var desc = false;
document.getElementById("test").onchange = function () {
sortUnorderedList("list", desc);
desc = !desc;
return false;
};
});
function sortDescending(a, b) {
var date1 = $(a).find(".date").text();
date1 = date1.split('.');
date1 = new Date(date1[2], date1[1] - 1, date1[0]);
var date2 = $(b).find(".date").text();
date2 = date2.split('.');
date2 = new Date(date2[2], date2[1] - 1, date2[0]);
return date1 < date2 ? 1 : -1;
}
$(document).ready(function () {
$('ul > li').sort(sortDescending).appendTo('ul');
});当页面加载时,列表按"date“span内容的值排序,在选择菜单change上,它按字母顺序对列表进行排序。但是当我把它改回"Date“时,列表日期没有按降序正确排序。
http://jsfiddle.net/s2JxC/
有人能帮上忙吗?我想要按字母顺序排序,按类"name“排序。与date按类"date“排序的方式相同。
干杯,JV
发布于 2013-01-14 13:39:23
你的代码中有一个很大的逻辑缺陷。我已经更新了你的jsfiddle。(http://jsfiddle.net/s2JxC/4/)
您有一个按字母顺序(升序和降序)排序的函数sortUnorderedList(),还有一个使用日期(总是降序)对列表进行排序的函数sortDescending()。
我已经做到了,当你点击字母顺序时,它总是按字母顺序排序,当你从下拉列表中选择日期时,它总是按日期(降序)排序。
剩下的就看你的了,你想让它如何工作。我希望这能帮到你!
EDIT: As requested jsfiddle.net/s2JxC/7 <--当您按字母顺序单击时,按".name“按字母顺序排序。并在单击date时按".date“降序排序。
您之前所做的是在页面加载时按日期(降序)进行排序。当你按字母顺序和非字母顺序点击的时候?(降序)当您单击日期时。
https://stackoverflow.com/questions/14313603
复制相似问题