2015-03-31 37 views
0

我想实现表排序功能。Javascript表排序

它需要保留<td><tr>的类和一些数据属性,所以我的做法与我在其他示例中看到的略有不同。我在排序功能中使用localeCompare()。我遇到的问题是,在排序第一个第七个列表中的项目无序后 - 其余的似乎是按顺序排列的。我尝试改变使用> <的排序功能,而我有相同的结果。

任何人都可以看一看我的代码,看看我是否有一个明显的错误,请错过?

我测试过的每一列总是第一个&第七。

enter image description here

var sort = function() { 

     var tbody = document.getElementById(tbody_id), 
      rows_len = tbody.rows.length, 
      col_len = tbody.rows[0].cells.length; 

     //console.log(rows_len, col_len); 

     var order_hash = [];  

     //loop rows 
     for(var i = 0; i < rows_len; i++) { 

      order_hash[i] = { 
       value:tbody.rows[i].cells[column].innerHTML, 
       html: tbody.rows[i].outerHTML 
      }; 

     } 

     console.log(order_hash); 

     order_hash.sort(function(a, b) { 

      var result = a.value.localeCompare(b.value); 

      return (order == 'asc') ? result : (result == 0) ? 0 : (result < 1) ? 1 : -1; 

     }); 

     order_hash.sort(); 

     var html = ''; 

     for(var i = 0; i < rows_len; i++) { 
      html += order_hash[i].html; 
     } 

     tbody.innerHTML = html; 

     order = undefined; 
     delete(order_hash); 

    }; 



}(); 

回答

1

要调用的排序方法两次(一种习惯和一个标准),所以第二次排序会因为order_hash不一致的方式进行排序:

如果没有提供的compareFunction ,通过将元素 转换为字符串并按Unicode代码点顺序比较字符串来排序元素。例如, 例如,“樱桃”出现在“香蕉”之前。在数字排序中,9在80之前出现 ,但由于数字被转换为字符串,“80”在Unicode顺序的“9”之前来到 。

编号:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort

删除第二类和做工精细。

演示:http://jsfiddle.net/wf9o2tg8/你是工作

+0

啊对,感谢这么多理解 – JohnnyFaldo 2015-03-31 15:15:19