HTML中实现Table表头点击升序/降序排序

一、前言

本文为转载文章,主要实现了点击表头对表格中数字排序的功能。
原文链接
相较于原文,这里更多的是
(1)添加了一些个人理解以及注释。
(2)并在文章的后半部分对代码稍加修改,使其同样可以对等长字符进行排序。
感兴趣的同学可以了解一下,希望能对大家有所帮助~~

二、源代码

1、原文代码(含转者注)

<!DOCTYPE HTML>
<html>
    <head>
    <meta charset="utf-8">
    </head>
    <body>
        <table>
            <tr>
                <th>姓名</th>
                <th id="th1" onclick="SortTable(this)" class="as">力量</th>
                <th id="th2" onclick="SortTable(this)" class="as">敏捷</th>
                <th id="th3" onclick="SortTable(this)" class="as">智力</th>
            </tr>
            <tr>
                <td name="td0">德鲁伊</td>
                <td name="td1">17</td>
                <td name="td2">24</td>
                <td name="td3">13</td>              
            </tr>
            <tr>
                <td name="td0">月之骑士</td>
                <td name="td1">15</td>
                <td name="td2">22</td>
                <td name="td3">16</td>              
            </tr>
            <tr>
                <td name="td0">众神之王</td>
                <td name="td1">19</td>
                <td name="td2">15</td>
                <td name="td3">20</td>              
            </tr>
            <tr>
                <td name="td0">流浪剑客</td>
                <td name="td1">23</td>
                <td name="td2">15</td>
                <td name="td3">14</td>              
            </tr>
        </table>
    </body>
</html>
<script type="text/javascript"> 
    var tag=1;
    function sortNumberAS(a, b)//升序
    {
        return a - b    
    }
    function sortNumberDesc(a, b)//降序
    {
        return b-a
    }

    function SortTable(obj){
        var td0s=document.getElementsByName("td0");//得到id为td0的一串列表,下相同
        var td1s=document.getElementsByName("td1");
        var td2s=document.getElementsByName("td2");
        var td3s=document.getElementsByName("td3");
        var tdArray0=[];
        var tdArray1=[];
        var tdArray2=[];
        var tdArray3=[];
        for(var i=0;i<td0s.length;i++){
            tdArray0.push(td0s[i].innerHTML);
        }//每串都写到数组中
        for(var i=0;i<td1s.length;i++){
            tdArray1.push(parseInt(td1s[i].innerHTML));
        }
        for(var i=0;i<td2s.length;i++){
            tdArray2.push(parseInt(td2s[i].innerHTML));
        }
        for(var i=0;i<td3s.length;i++){
            tdArray3.push(parseInt(td3s[i].innerHTML));
        }
        var tds = document.getElementsByName("td" + obj.id.substr(2, 1));
        //得到当前传入对象的那一列
        var columnArray=[];
        for(var i=0;i<tds.length;i++){
            columnArray.push(parseInt(tds[i].innerHTML));
        }//当前那一列都写入column这个栈,是逆序的
        var orginArray=[];
        for(var i=0;i<columnArray.length;i++){
            orginArray.push(columnArray[i]);
        }//将这一列的内容再存储一遍,一会原来列表修改以后,
        //通过比对值的方式对应到当前行的内容,实现同行内容一起修改
        if(obj.className=="as"){
            columnArray.sort(sortNumberAS);   //排序后的新值,只排序了当前列
            obj.className="desc";
        }else{
            columnArray.sort(sortNumberDesc);  //排序后的新值
            obj.className="as";
        }


        for(var i=0;i<columnArray.length;i++){
            for(var j=0;j<orginArray.length;j++){
                if(orginArray[j]==columnArray[i]){
                    document.getElementsByName("td0")[i].innerHTML=tdArray0[j];
                    document.getElementsByName("td1")[i].innerHTML=tdArray1[j];
                    document.getElementsByName("td2")[i].innerHTML=tdArray2[j];
                    document.getElementsByName("td3")[i].innerHTML=tdArray3[j];
                    orginArray[j]=null;
                    break;
                }
            }
        }
    }
</script>


2、修改后同样可对等长字符串排序的代码

<!DOCTYPE HTML>
<html>
    <head>
    <meta charset="utf-8">
    </head>
    <body>
        <table>
            <tr>
                <th id="th0" onclick="SortTable(this)" class="as">姓名</th>
                <th id="th1" onclick="SortTable(this)" class="as">力量</th>
                <th id="th2" onclick="SortTable(this)" class="as">敏捷</th>
                <th id="th3" onclick="SortTable(this)" class="as">智力</th>
            </tr>
            <tr>
                <td name="td0">a</td>
                <td name="td1">17</td>
                <td name="td2">24</td>
                <td name="td3">13</td>              
            </tr>
            <tr>
                <td name="td0">b</td>
                <td name="td1">15</td>
                <td name="td2">22</td>
                <td name="td3">16</td>              
            </tr>
            <tr>
                <td name="td0">c</td>
                <td name="td1">19</td>
                <td name="td2">15</td>
                <td name="td3">20</td>              
            </tr>
            <tr>
                <td name="td0">d</td>
                <td name="td1">23</td>
                <td name="td2">15</td>
                <td name="td3">14</td>              
            </tr>
        </table>
    </body>
</html>
<script type="text/javascript"> 
    var tag=1;
    function SortTable(obj){
        var td0s=document.getElementsByName("td0");//得到id为td0的一串列表,下相同
        var td1s=document.getElementsByName("td1");
        var td2s=document.getElementsByName("td2");
        var td3s=document.getElementsByName("td3");
        var tdArray0=[];
        var tdArray1=[];
        var tdArray2=[];
        var tdArray3=[];
        for(var i=0;i<td0s.length;i++){
            tdArray0.push(td0s[i].innerHTML);
        }//每串都写到数组中
        for(var i=0;i<td1s.length;i++){
            tdArray1.push(td1s[i].innerHTML);
        }
        for(var i=0;i<td2s.length;i++){
            tdArray2.push(td2s[i].innerHTML);
        }
        for(var i=0;i<td3s.length;i++){
            tdArray3.push(td3s[i].innerHTML);
        }
        var tds = document.getElementsByName("td" + obj.id.substr(2, 1));
        //得到当前传入对象的那一列
        var columnArray=[];
        for(var i=0;i<tds.length;i++){
            columnArray.push(tds[i].innerHTML);
        }//当前那一列都写入column这个栈,是逆序的
        var orginArray=[];
        for(var i=0;i<columnArray.length;i++){
            orginArray.push(columnArray[i]);
        }//将这一列的内容再存储一遍,一会原来列表修改以后,
        //通过比对值的方式对应到当前行的内容,实现同行内容一起修改
        columnArray.sort();   //排序后的新值,只排序了当前列
        for(var i=0;i<columnArray.length;i++){
            for(var j=0;j<orginArray.length;j++){
                if(orginArray[j]==columnArray[i]){
                    document.getElementsByName("td0")[i].innerHTML=tdArray0[j];
                    document.getElementsByName("td1")[i].innerHTML=tdArray1[j];
                    document.getElementsByName("td2")[i].innerHTML=tdArray2[j];
                    document.getElementsByName("td3")[i].innerHTML=tdArray3[j];
                    orginArray[j]=null;
                    break;
                }
            }
        }
    }
</script>


运行截图

1、原文截图

在这里插入图片描述在这里插入图片描述

2、修改后运行截图

在这里插入图片描述在这里插入图片描述

  • 3
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
下面是一个简单的示例代码,可以实现点击表头进行升序降序排列: ```html <!DOCTYPE html> <html> <head> <title>Table Sort Example</title> <style> table, th, td { border: 1px solid black; } </style> </head> <body> <table id="myTable"> <thead> <tr> <th onclick="sortTable(0)">Name</th> <th onclick="sortTable(1)">Age</th> <th onclick="sortTable(2)">Country</th> </tr> </thead> <tbody> <tr> <td>John</td> <td>25</td> <td>USA</td> </tr> <tr> <td>Jane</td> <td>30</td> <td>Canada</td> </tr> <tr> <td>Bob</td> <td>20</td> <td>UK</td> </tr> </tbody> </table> <script> function sortTable(colIndex) { var table = document.getElementById("myTable"); var rows = table.rows; var switching = true; var shouldSwitch = false; while (switching) { switching = false; for (var i = 1; i < rows.length - 1; i++) { shouldSwitch = false; var x = rows[i].getElementsByTagName("td")[colIndex]; var y = rows[i + 1].getElementsByTagName("td")[colIndex]; if (x.innerHTML.toLowerCase() > y.innerHTML.toLowerCase()) { shouldSwitch = true; break; } } if (shouldSwitch) { rows[i].parentNode.insertBefore(rows[i + 1], rows[i]); switching = true; } } } </script> </body> </html> ``` 这段代码,我们创建了一个包含三列的表格,每一列的表头都绑定了一个 `onclick` 事件,当点击表头时,会调用 `sortTable` 函数进行排序排序使用了冒泡排序算法,通过比较表格两行的值,交换它们的位置来实现排序。在比较时,我们将每一行指定列的值取出来,并将它们转换为小写字母进行比较,以确保排序结果的正确性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值