一个对HTML table 按column排序的方法

最近在写一个工具用于生成一个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];

                }

            }

          }

         
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值