2014-02-25 5 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 '(' 25 апреля 2014 года);', результатом в некоторых будет 'NaN'. Вместо этого используйте вместо этого [значение времени] (http://ecma-international.org/ecma-262/5.1/#sec-15.9.1.1). – RobG

ответ

2

Если по убыванию и данные являются «нулевыми», сделайте данные как 1 января 1900 года (так что это будет внизу). Если по возрастанию и данным «null», сделайте данные 1 января 9999 года (так он будет внизу)

Затем выполните нормальное сравнение yx или xy.

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

Смежные вопросы