最近在写一个工具用于生成一个HTML report,且可以按Table的Column列排序, 我的设计思想是将Table中的每行数据(Cells)存放到一个Array A中(每个element 对应某行中某列的Cell),然后将所有的行存放到另一个Array B 中,排序函数中比较的形式为a[column] vs. b[column]. 其中a, b 为Array B 中的element, 每个a/b其实也是一个Array A, 所以我们可以用[ ] 来指定排序的Cell。
这里将这个排序函数写下来,以供大家参考:
var pre_sort_column = -1; var data_array = new Array(); var is_first_sort = true; function GetRecordTable() { return document.getElementById("NullPtBuckets"); } function FillDataInArray() { if(is_first_sort) { is_first_sort=false; var dataTable = GetRecordTable(); var tableRows = dataTable.rows; var record_length = tableRows[0].cells.length; for(var i = 0;i<tableRows.length;i++) { var record_info = new Array(); var cells = tableRows[i].cells; for(var k=0;k<record_length;k++) { record_info[k]=cells[k].innerHTML; } data_array.push(record_info); } } } function SortColumn(columnIndex) { FillDataInArray(); if(pre_sort_column==columnIndex) {
//Reverse the array if second click on the same column,so tricky:) data_array.reverse(); } else { pre_sort_column = columnIndex; data_array.sort(function(a,b) { return a[columnIndex] > b[columnIndex] ? 1 : -1; }) } var dataTable = GetRecordTable(); var tableRows = dataTable.rows; var record_length = tableRows[0].cells.length; for(var i = 0;i<data_array.length;i++) { var record_info = data_array[i]; var cells = tableRows[++i].cells; for(var k = 0;k<record_length;k++) { cells[k].innerHTML = record_info[k]; } } }