我正在尝试对没有任何插件的表行进行排序。不幸的是,我没有选择使用插件。好吧,这是到目前为止我一直在尝试的方法:

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。我现在可以按截止日期进行排序,但是它仍然不会强制将截止日期为空的行排到底部。

最佳答案

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

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

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

关于javascript - 使用jQuery对表格行进行排序时忽略空单元格,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22002250/

10-09 17:32