2014-02-25 99 views
1

我想对没有任何插件的表格行进行排序。不幸的是,我没有选择使用插件。那么这里就是我试图至今:使用jQuery排序表格行时忽略空单元格

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为那些谁想看看我已经做到现在。我真的很感激任何帮助。

UPDATE

这里有一个更新的jsbin。我现在可以通过关闭日期进行排序,但它仍然不会强制关闭日期为空的行到底。

+0

什么不工作?按截止日期进行排序工作正常 – juvian

+0

@juvian嗯,我希望将行与封闭的日期和空的下来,然后排序它们。 – user1601973

+1

我不希望所有浏览器都以'new Date('Apr 25 2014');'的格式正确解析日期字符串,',其中的一部分结果是'NaN'。考虑使用[时间值](http://ecma-international.org/ecma-262/5.1/#sec-15.9.1.1)。 – RobG

回答

2

如果降序和数据为“空”,使数据为1900年1月1日(所以它将在底部) 如果升序和数据为“空”,使数据为9999年1月1日它会在底部)

然后做一个正常的比较yx或xy。

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