【问题标题】:Ignoring empty cells while sorting table rows using jQuery使用jQuery对表格行进行排序时忽略空单元格
【发布时间】:2014-02-25 00:37:13
【问题描述】:

我正在尝试在没有任何插件的情况下对表格行进行排序。不幸的是,我没有使用插件的选项。好吧,这是我到目前为止所尝试的:

var info = $('#project_table tr.punch_list_summary');
    //For Closed Date
    $(document).on('click', '#descending_closed_date', function(e) {
        e.preventDefault();
        var sortDir = -1;
        info.sort(function(a, b) {
            if ($(a).attr('data-closeddate') === 'null') {
                if ($(b).attr('data-closeddate') === 'null') {
                    return false;
                }
                return true;
            }
            a = new Date($(a).attr('data-closeddate'));
            b = new Date($(b).attr('data-closeddate'));
            return (a - b) * sortDir;
        });
        $('#project_table').html(info);
        sortDir = 1;
    });

    $(document).on('click', '#ascending_closed_date', function(e) {
        e.preventDefault();
        var sortDir = 1;
        info.sort(function(a, b) {
            if ($(a).attr('data-closeddate') === 'null') {
                if ($(b).attr('data-closeddate') === 'null') {
                    return false;
                }
                return true;
            }
            a = new Date($(a).attr('data-closeddate'));
            b = new Date($(b).attr('data-closeddate'));
            return (a - b) * sortDir;
        });
        $('#project_table').html(info);
        sortDir = -1;
    });

});

如您所见,我使用data-attribute 对行进行排序。 Closed Date 列可以为空,也可以有日期。问题是它只是对随机行进行排序,此外,我试图将所有空行放在底部,将关闭日期的行放在顶部。我可能做错了什么?

这里是工作jsbin 给那些想看看我到目前为止所做的事情的人。非常感谢任何帮助。

更新

这是更新后的jsbin。我现在可以按关闭日期排序,但它仍然不会强制关闭日期为空的行到底部。

【问题讨论】:

  • 什么不起作用?按关闭日期排序工作正常
  • @juvian 好吧,我想把日期关闭的行向上,空的行向下,然后对它们进行排序。
  • 我不希望所有浏览器都能正确解析 new Date('Apr 25 2014'); 格式的日期字符串,有些结果会是 NaN。考虑改用time value
  • 那我应该怎么做呢?
  • 顺便说一句,使用时间值的一个优点是它们可以直接作为数字排序,无需将它们转换为日期字符串(尽管如果需要人类可读的显示,这相当容易) .

标签: javascript jquery sorting


【解决方案1】:

如果降序且数据为“null”,则将数据设为 1900 年 1 月 1 日(所以它会在底部) 如果升序且数据为“null”,则将数据设为 9999 年 1 月 1 日(所以它会在底部)

然后做一个正常的比较y-x或x-y。

http://jsbin.com/nalomuje/23/edit

【讨论】:

    猜你喜欢
    • 2015-01-24
    • 2015-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-30
    • 2023-02-18
    • 2022-01-02
    • 1970-01-01
    相关资源
    最近更新 更多