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