2014-02-25 140 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