使用jQuery对表行进行排序时忽略空单元格

时间:2014-02-25 00:37:14

标签: javascript jquery sorting

我试图在没有任何插件的情况下对表行进行排序。不幸的是我没有选择使用插件。那么这就是我到现在为止所尝试的:

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对行进行排序。 关闭日期列可以为空或可以包含日期。问题是它只是对随机行进行排序,而且,我试图将所有空行放在底部,将截止日期的行放在顶部。我可能做错了什么?

对于那些想要了解我到目前为止所做的事情的人来说,这是jsbin的工作。我真的很感激任何帮助。

更新

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

1 个答案:

答案 0 :(得分:2)

如果降序并且数据为“null”,则将数据设为1900年1月1日(因此它将位于底部) 如果升序且数据为“null”,则将数据设为9999年1月1日(因此它将位于底部)

然后进行正常比较y-x或x-y。

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