首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在jQuery中对具有不同条件的项排序

在jQuery中对具有不同条件的项排序
EN

Stack Overflow用户
提问于 2015-08-09 16:51:28
回答 2查看 69关注 0票数 1

我有这个html

代码语言:javascript
复制
<ul id="theList">
<li><span class="to-date" date-fromdate ="2014-12"     data-todate="2015-01">2015-01</span></li>
<li><span class="to-date" date-fromdate ="2016-12"      data-todate="2017-01">2017-01</span></li>
<li><span class="to-date" date-fromdate ="2014-12"  data-todate="now">now</span></li>
  <li><span class="to-date" date-fromdate ="2015-01"  data-todate="now">now</span></li>
</ul>

和当前的JavaScript

代码语言:javascript
复制
function sortList(list) {
var $list = $(list);
var elems = $.makeArray($list.find("li"));
elems.sort(function(a, b) {
    var $aStr = $(a).find(".to-date").attr("data-todate");
    var $bStr = $(b).find(".to-date").attr("data-todate");

    var $aStrFrom = $(a).find(".to-date").attr("data-fromdate");
    var $bStrFrom = $(b).find(".to-date").attr("data-fromdate");


    if ($aStr != 'now') {
        return true;
    } else {
        return new Date($aStr) < new Date($bStr);
    }
});

$list.html(elems);
}
sortList("#theList");

我想要实现的是,当一个项目有“现在”在截止日期的攻击,他们是排序从日期attr,并放在列表的顶端。在截止日期攻击中,剂量有“现在”的项目按列表底部的日期进行排序。

那件事怎么可能?

这是一把小提琴

https://jsfiddle.net/x1z47m0j/

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-08-09 17:44:07

传递给sort的比较函数应该返回一个整数,而不是布尔值。简而言之,comparator(a, b)应该返回1(如果是a > b ),-1 (如果是a < b )和0(如果相等)。

另外,您将对某些new Date('now')值执行b操作,这会产生无效的日期。你不会想搞砸这些的。

只要仔细地处理a, b (小提琴)的所有可能的情况,就可以使用一个良好的比较函数来重现所需的排序:

代码语言:javascript
复制
if ($aStr == 'now') {
    if ($bStr == 'now')
        return -comparator(new Date($aStrFrom), new Date($bStrFrom));
    else
        return -1;
} else if ($bStr == 'now') {
    return 1;
} else {
    return comparator(new Date($aStr), new Date($bStr));
}

function comparator(a, b) {
    return a > b ? 1 : (a == b ? 0 : -1);
}
票数 0
EN

Stack Overflow用户

发布于 2015-08-09 17:57:50

只使用一种方法(小提琴) --参见注释:

代码语言:javascript
复制
function sortList(list) {
    var $list = $(list);
    var elems = $.makeArray($list.find("li"));
    elems.sort(function (a, b) {
        var $aStr = $(a).find(".to-date").attr("data-todate");
        var $bStr = $(b).find(".to-date").attr("data-todate");

        var $aStrFrom = $(a).find(".to-date").attr('date-fromdate');
        var $bStrFrom = $(b).find(".to-date").attr('date-fromdate');

        if($aStr === 'now' && $bStr === 'now') { // if both have now - sort by from-date
           return new Date($bStrFrom).getTime() - new Date($aStrFrom).getTime(); // reverse to change sort order
        }

        if($aStr === 'now') {
            return -1; // if first have now return -1
        }

        if($bStr === 'now') {
            return 1; // if second have now return 1
        }

        return new Date($bStr).getTime() - new Date($aStr).getTime(); // if both lack now sort by to-date - reverse to change sort order
    });

    $list.html(elems);
}
sortList("#theList");
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31906541

复制
相关文章

相似问题

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