我的第二个JavaScript脚本--对table中的数据排序

来源:互联网 发布:华硕黄静 知乎 编辑:程序博客网 时间:2024/06/01 19:44
    已经有很多位大侠已经在网络上贡献了自己的对table中的数据进行排序操作了,不过自己还是写了一个比较简单的排序算法练习和熟悉一下javascript。
    其实现的主要思想是:首先得到要排序的表的部分,然后将表的每行数据作为一个数据单元存放在一个数组中,然后根据需要制定各个sort排序函数。
    缺点:不是很灵活,有些函数的代码的扩展性不是很好,哈哈。
    注意:对汉字进行排序的时候,要使用a.localeCompare(b)函数,不能使用简单的>, =, <运算符。
    下面是程序的代码:
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312"><head>
        <style type="text/css">
        #datatable{
            table-layout:fixed;
            width:1000px;
            border-collapse:collapse;
            text-align:center;
           
        }
        #datatable th,td{
            border:1px solid #aaa;
   
        }
       
        #datatable thead th{
            border-bottom:2px solid #3D580B;
            background-color:#AADDFF;
            padding:10px 0px;
            width: 60px;
        }
        </style>
    <script language="JavaScript">
        function sortColumn(tablename,ColumnID,TextType,SortType)
        {
            var thetable = document.getElementById(tablename);
           
            var    rowsArr = Array();
            for(var i =0; i<thetable.rows.length;i++)
            {
                rowsArr.push(thetable.rows[i]);
            }

            if( TextType.toLowerCase() == 'number' && SortType.toLowerCase() == 'asc' )
            {
                rowsArr.sort(sortNumberAsc);
            }else if(TextType.toLowerCase() == 'char' && SortType.toLowerCase() == 'asc')
            {
                rowsArr.sort(sortCharAsc);
            }else if( TextType.toLowerCase() == 'number' && SortType.toLowerCase() == 'desc' )
            {
                rowsArr.sort(sortNumberDesc);
            }else if(TextType.toLowerCase() == 'char' && SortType.toLowerCase() == 'desc')
            {
                rowsArr.sort(sortCharDesc);
            }
           
            function sortNumberAsc(a,b)
            {
                a = a.cells[ColumnID].innerText?a.cells[ColumnID].innerText:a.cells[ColumnID].innerHTML;
                b = b.cells[ColumnID].innerText?b.cells[ColumnID].innerText:b.cells[ColumnID].innerHTML;
                if(parseFloat(a)>parseFloat(b))
                    return 1;
                else if( parseFloat(a)< parseFloat(b))
                    return -1;
                else return 0;
            }
           
            function sortCharAsc(a,b)
            {
                a = a.cells[ColumnID].innerText?a.cells[ColumnID].innerText:a.cells[ColumnID].innerHTML;
                b = b.cells[ColumnID].innerText?b.cells[ColumnID].innerText:b.cells[ColumnID].innerHTML;
                return a.localeCompare(b);
            }
           
            function sortNumberDesc(a,b)
            {
                a = a.cells[ColumnID].innerText?a.cells[ColumnID].innerText:a.cells[ColumnID].innerHTML;
                b = b.cells[ColumnID].innerText?b.cells[ColumnID].innerText:b.cells[ColumnID].innerHTML;
                if(parseFloat(a) < parseFloat(b))
                    return 1;
                else if( parseFloat(a) > parseFloat(b))
                    return -1;
                else return 0;
            }
           
            function sortCharDesc(a,b)
            {
                a = a.cells[ColumnID].innerText?a.cells[ColumnID].innerText:a.cells[ColumnID].innerHTML;
                b = b.cells[ColumnID].innerText?b.cells[ColumnID].innerText:b.cells[ColumnID].innerHTML;
                return -a.localeCompare(b);
            }
            for( i=0; i<rowsArr.length;i++)
            {
                thetable.appendChild(rowsArr[i]);
            }
        }
    </script>
</head>
<body>
<table id="datatable">
    <thead>
        <tr>
            <th><img src="http://b0.ac-images.cdnmyspace.cn/cnimages01/2/l_66c9a059bd648346689ebef01388afc4.gif" onclick="sortColumn('databody',0,'number','asc');">注册日期<img src="http://b0.ac-images.cdnmyspace.cn/cnimages01/1/l_57660fa7cc99aa3c97e9204e3815e5fc.gif" onclick="sortColumn('databody',0,'number','desc');"></th>
            <th><img src="http://b0.ac-images.cdnmyspace.cn/cnimages01/2/l_66c9a059bd648346689ebef01388afc4.gif" onclick="sortColumn('databody',1,'char','asc');">省<img src="http://b0.ac-images.cdnmyspace.cn/cnimages01/1/l_57660fa7cc99aa3c97e9204e3815e5fc.gif" onclick="sortColumn('databody',1,'char','desc');"></th>
            <th><img src="http://b0.ac-images.cdnmyspace.cn/cnimages01/2/l_66c9a059bd648346689ebef01388afc4.gif" onclick="sortColumn('databody',2,'number','asc');">PV<img src="http://b0.ac-images.cdnmyspace.cn/cnimages01/1/l_57660fa7cc99aa3c97e9204e3815e5fc.gif" onclick="sortColumn('databody',2,'number','desc');"></th>
            <th><img src="http://b0.ac-images.cdnmyspace.cn/cnimages01/2/l_66c9a059bd648346689ebef01388afc4.gif" onclick="sortColumn('databody',3,'number','asc');">IP数<img src="http://b0.ac-images.cdnmyspace.cn/cnimages01/1/l_57660fa7cc99aa3c97e9204e3815e5fc.gif" onclick="sortColumn('databody',3,'number','desc');"></th>
            <th><img src="http://b0.ac-images.cdnmyspace.cn/cnimages01/2/l_66c9a059bd648346689ebef01388afc4.gif" onclick="sortColumn('databody',4,'number','asc');">一周内登陆次数<img src="http://b0.ac-images.cdnmyspace.cn/cnimages01/1/l_57660fa7cc99aa3c97e9204e3815e5fc.gif" onclick="sortColumn('databody',4,'number','desc');"></th>
            <th><img src="http://b0.ac-images.cdnmyspace.cn/cnimages01/2/l_66c9a059bd648346689ebef01388afc4.gif" onclick="sortColumn('databody',5,'number','asc');">一平均在线时间<img src="http://b0.ac-images.cdnmyspace.cn/cnimages01/1/l_57660fa7cc99aa3c97e9204e3815e5fc.gif" onclick="sortColumn('databody',5,'number','desc');"></th>
            <th><img src="http://b0.ac-images.cdnmyspace.cn/cnimages01/2/l_66c9a059bd648346689ebef01388afc4.gif" onclick="sortColumn('databody',6,'number','asc');">一周内空间浏览次数<img src="http://b0.ac-images.cdnmyspace.cn/cnimages01/1/l_57660fa7cc99aa3c97e9204e3815e5fc.gif" onclick="sortColumn('databody',6,'number','desc');"></th>
        </tr>
    </thead>
    <tbody id="databody">
        <tr>
            <td>20080404</td>
            <td>山东</td>
            <td>30</td>
            <td>0</td>
            <td>5</td>
            <td>38.23</td>
            <td>100</td>
        </tr>
        <tr>
            <td>20080404</td>
            <td>山东</td>
            <td>14</td>
            <td>0</td>
            <td>6</td>
            <td>20.81</td>
            <td>23</td>
        </tr>
        <tr>
            <td>20080404</td>
            <td>内蒙古</td>
            <td>13</td>
            <td>0</td>
            <td>6</td>
            <td>35.71</td>
            <td>112</td>
        </tr>
        <tr>
            <td>20080401</td>
            <td>山东</td>
            <td>12</td>
            <td>0</td>
            <td>4</td>
            <td>19.98</td>
            <td>7</td>
        </tr>
        <tr>
            <td>20080406</td>
            <td>网吧</td>
            <td>11</td>
            <td>0</td>
            <td>6</td>
            <td>39.80</td>
            <td>92</td>
        </tr>
        <tr>
            <td>20080406</td>
            <td>内蒙古</td>
            <td>9</td>
            <td>0</td>
            <td>7</td>
            <td>35.85</td>
            <td>18</td>
        </tr>
        <tr>
            <td>20080404</td>
            <td>内蒙古</td>
            <td>9</td>
            <td>0</td>
            <td>4</td>
            <td>31.24</td>
            <td>29</td>
        </tr>
        <tr>
            <td>20080404</td>
            <td>黑龙江</td>
            <td>8</td>
            <td>0</td>
            <td>7</td>
            <td>12.91</td>
            <td>55</td>
        </tr>
        <tr>
            <td>20080404</td>
            <td>山东</td>
            <td>8</td>
            <td>0</td>
            <td>5</td>
            <td>9.87</td>
            <td>4</td>
        </tr>
        <tr>
            <td>20080403</td>
            <td>山东</td>
            <td>8</td>
            <td>0</td>
            <td>5</td>
            <td>36.27</td>
            <td>18</td>
        </tr>
        <tr>
            <td>20080402</td>
            <td>山东</td>
            <td>8</td>
            <td>0</td>
            <td>4</td>
            <td>18.57</td>
            <td>18</td>
        </tr>
        <tr>
            <td>20080406</td>
            <td>山东</td>
            <td>8</td>
            <td>0</td>
            <td>3</td>
            <td>48.47</td>
            <td>11</td>
        </tr>
        <tr>
            <td>20080402</td>
            <td>黑龙江</td>
            <td>6</td>
            <td>0</td>
            <td>4</td>
            <td>5.32</td>
            <td>1</td>
        </tr>
        <tr>
            <td>20080404</td>
            <td>山东</td>
            <td>5</td>
            <td>0</td>
            <td>7</td>
            <td>25.92</td>
            <td>14</td>
        </tr>
        <tr>
            <td>20080402</td>
            <td>山东</td>
            <td>5</td>
            <td>0</td>
            <td>4</td>
            <td>7.71</td>
            <td>1</td>
        </tr>
        <tr>
            <td>20080404</td>
            <td>山东</td>
            <td>5</td>
            <td>0</td>
            <td>3</td>
            <td>29.66</td>
            <td>17</td>
        </tr>
    </tbody>
</table>
</body>
</html>
原创粉丝点击