2014-11-08 38 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/