我想按列表项的内容对无序列表进行排序。默认情况下,我希望它按日期排序,并可以选择按名称按字母顺序排序。
<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');
});
当页面加载时,列表按“日期”跨度内容的值排序,在选择菜单更改时,它按字母顺序对列表进行排序。但是当我将它改回“日期”时,列表日期没有按降序正确排序。
有人可以帮忙吗?我希望按字母排序按类“名称”排序。与日期按“日期”类排序的方式相同。
干杯,合资企业