2016-04-29 49 views
0

使用jQuery的表中升序和降序,這裏是JavaScript文件。錯誤是:表中使用jQuery的升序和降序

無法讀取屬性「localeCompare」的未定義

請幫我解決這個升序和降序排列。

function sortTable1() { 
    $('th').click(function() { 
     var table = $(this).parents('table').eq(0) 
     var rows = table.find("tr:not(:has('th'))").toArray().sort(comparer($(this).index())) 
     this.asc = !this.asc 
     if (!this.asc) { rows = rows.reverse() } 
     for (var i = 0; i < rows.length; i++) { table.append(rows[i]) } 
    }) 
    function comparer(index) { 
     return function (a, b) { 
      var valA = getCellValue(a, index), valB = getCellValue(b, index) 
      return $.isNumeric(valA) && $.isNumeric(valB) ? valA - valB : valA.localeCompare(valB) 
     } 
    } 
    function getCellValue(row, index) { return $(row).children('td').eq(index).html() } 

    // additional code to apply a filter 
    $('table').each(function() { 
     var table = $(this) 
     var headers = table.find('th').length 
     var filterrow = $('<tr>').insertAfter($(this).find('th:last()').parent()) 
     for (var i = 0; i < headers; i++) { 
      filterrow.append($('<th>').append($('<input>').attr('type', 'text').keyup(function() { 
       table.find('tr').show() 
       filterrow.find('input[type=text]').each(function() { 
        var index = $(this).parent().index() + 1 
        var filter = $(this).val() != '' 
        $(this).toggleClass('filtered', filter) 
        if (filter) { 
         var el = 'td:nth-child(' + index + ')' 
         var criteria = ":contains('" + $(this).val() + "')" 
         table.find(el + ':not(' + criteria + ')').parent().hide() 
        } 
       }) 
      }))) 
     } 
     filterrow.append($('<th>').append($('<input>').attr('type', 'button').val('Clear Filter').click(function() { 
      $(this).parent().parent().find('input[type=text]').val('').toggleClass('filtered', false) 
      table.find('tr').show() 
     }))) 
    }) 
} 

這裏是表結構:

<table id="test" class="master_table test_1 table no-border hover"> 
    <thead class="no-border"> 
     <tr> 
      <th></th> 
      <th></th> 
      <th></th> 
      <th></th> 
      <th class="sortable1">Name</th> 
      <th class="text-center">Status</th> 
      <th>Date</th> 
      <th id="nm" class="text-center">Hrs</th> 
     </tr> 
    </thead> 
</table> 

回答

0

你應該檢查空值

return function (a, b) { 
      var valA = getCellValue(a, index), valB = getCellValue(b, index) 
      if(valA != null && valB!=null) 
      { 
       return $.isNumeric(valA) && $.isNumeric(valB) ? valA - valB : valA.localeCompare(valB) 
      } 
      else{ 
       return 0; 
      } 
     } 
+0

喜公園,它現在的工作,但我的表包含月份明智的排序。我需要1月01日,1月23日,2月9日,2月11日,現在我正在按字母順序排列。請幫我解決這個問題。 – White