2014-11-08 36 views
1

如何以簡單的方式使此功能適用於具有3列點擊的表格?而當用戶再次點擊時,表應該被排序後裔。沒有允許jQuery或其他庫。僅使用JavaScript對錶進行分類

function sortData() { 
    var tableData = document.getElementById('data_table').getElementsByTagName('tbody').item(0); 
    var rowData = tableData.getElementsByTagName('tr'); 
    for (var i = 0; i < rowData.length - 1; i++) { 
     for (var j = 0; j < rowData.length - (i + 1); j++) { 
      if (parseInt(rowData.item(j).getElementsByTagName('td').item(0).innerHTML) > parseInt(rowData.item(j + 1).getElementsByTagName('td').item(0).innerHTML)) { 
       tableData.insertBefore(rowData.item(j + 1), rowData.item(j)); 
      } 
     } 
    } 
} 

回答

1

我寫了這個功能排序像一千多年前表,jQuery的前甚至存在(我認爲):

function tableSort(table, column, initrow, lastrow, descending){ 
    var value1, value2; 
    var tbl = document.getElementById(table); 
    for(i = initRow;i < lastRow;i++){ 
     x = i; 
     for(j = i+1;j < lastRow + 1;j++){ 
      value1 = tbl.rows[j].cells[column].innerHTML.toLowerCase().replace(',','.'); 
      value2 = tbl.rows[x].cells[column].innerHTML.toLowerCase().replace(',','.'); 
      if(!isNaN(value1)){ 
       value1 = parseFloat(value1); 
       value2 = parseFloat(value2); 
      } 
      if(!descending && value1 < value2){x = j;} 
      else{ 
       if(descending && value1 > value2){x = j;} 
      } 
     } 
     tbl.tBodies[0].insertBefore(tbl.rows[x], tbl.rows[i]); 
    } 
} 

表:要排序表的id

列:從哪一行開始排序:要排序

initrow列的索引

LASTROW:以什麼樣的列完成排序

下降:排序方向(布爾值,你可以設置其他地方翻轉它)


例如:

<table id='mytable'> 
    <th>my first column</th> 
    <th desc='false' onclick='tableSort("myTable", 2, 1, 10, this.desc)'>my second column</th> 
    <tbody> <!-- important!!!! --> 
     <tr>... etc ...</tr> 
    </tbody> 
</table> 
-1

我建議你運行一個jQuery插件:dataTable。這對於排序表格非常有幫助,並增加了您將來可能需要的功能。 :D希望它有幫助:)鏈接這裏:http://www.datatables.net/