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

题目:如下图,请实现表格信息的排序功能,当点击表头的属性区域,将表格信息进行排序切换功能,即第一次点击为降序排序,再一次点击进行升序排序。

姓名力量敏捷智力
德鲁伊172413
月之骑士152216
众神之王191520
流浪剑客231514

基本思路:

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>html5</title>
    <style>

    </style>

    <!--不需要再次引用jquery-->
    <script type="text/javascript" src="http://code.jquery.com/jquery-1.7.2.min.js"></script>
    <script>
        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");
            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));
            }
            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>

</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>

结果:

  • 1
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个简单的示例代码,可以实现点击表头进行升序降序排列: ```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` 函数进行排序排序使用了冒泡排序算法,通过比较表格两行的值,交换它们的位置来实现排序。在比较时,我们将每一行指定列的值取出来,并将它们转换为小写字母进行比较,以确保排序结果的正确性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值