首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jQuery按列表内容日期或字母顺序对列表进行排序

jQuery按列表内容日期或字母顺序对列表进行排序
EN

Stack Overflow用户
提问于 2013-01-14 13:16:24
回答 1查看 5.6K关注 0票数 1

我想按列表项的内容对无序列表进行排序。默认情况下,我希望它按日期排序,并可以选择按名称的字母顺序排序。

代码语言:javascript
复制
<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>

我到目前为止的尝试是:

代码语言:javascript
复制
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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-14 13:39:23

你的代码中有一个很大的逻辑缺陷。我已经更新了你的jsfiddle。(http://jsfiddle.net/s2JxC/4/)

您有一个按字母顺序(升序和降序)排序的函数sortUnorderedList(),还有一个使用日期(总是降序)对列表进行排序的函数sortDescending()

我已经做到了,当你点击字母顺序时,它总是按字母顺序排序,当你从下拉列表中选择日期时,它总是按日期(降序)排序。

剩下的就看你的了,你想让它如何工作。我希望这能帮到你!

EDIT: As requested jsfiddle.net/s2JxC/7 <--当您按字母顺序单击时,按".name“按字母顺序排序。并在单击date时按".date“降序排序。

您之前所做的是在页面加载时按日期(降序)进行排序。当你按字母顺序和非字母顺序点击的时候?(降序)当您单击日期时。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14313603

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档