JS实现点击表头表格自动排序(含数字、字符串、日期)

JS实现点击表头表格自动排序(含数字、字符串、日期)

<!DOCTYPE>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>JS实现点击表头表格自动排序(含数字、字符串、日期)</title>
    <style>
     #tableSort, #tableBtcSort{
        moz-user-select:-moz-none;
        -moz-user-select:none;
        -o-user-select:none;
        -khtml-user-select:none;
        -webkit-user-select:none;
        -ms-user-select:none;
        user-select:none;
        border-collapse:collapse;
        border-spacing:0;
        margin:0;
        padding:0;
        width:100%;
        text-align:center;
        margin:15px 0;
    }
    #tableSort th ,#tableBtcSort th {
        cursor:pointer;
        background:#eee
    }
    #tableSort tr:nth-child(even) ,#tableBtcSort   tr:nth-child(even){
        background:#f9f9f9
    }
    #tableSort th,#tableSort td , #tableBtcSort th, #tableBtcSort td{
        padding:10px;
        border:1px solid #ccc;
    }

    </style>
</head>

<body>
<table id="tableSort">
    <thead>
    <tr>
        <th data-type="num" onclick="sortpais('tableSort')">百分比</th>
        <th data-type="string" onclick="sortpais('tableSort')">姓名</th>
        <th data-type="date" onclick="sortpais('tableSort')">时间</th>
    </tr>
    </thead>
    <tbody>
    <tr>
        <td>0.4%</td>
        <td>aaaa</td>
        <td>2012-12-12</td>
    </tr>
    <tr>
        <td>-3%</td>
        <td>mmmm</td>
        <td>2013-12-16</td>
    </tr>
    <tr>
        <td>0.44%</td>
        <td>cccc</td>
        <td>2014-12-12</td>
    </tr>
    <tr>
        <td>4%</td>
        <td>ffff</td>
        <td>2015-12-12</td>
    </tr>
    <tr>
        <td>2%</td>
        <td>bbbb</td>
        <td>2016-12-18</td>
    </tr>
    <tr>
        <td>-6.9%</td>
        <td>ssss</td>
        <td>2008-10-07</td>
    </tr>
    <tr>
        <td>5%</td>
        <td>tttt</td>
        <td>2012-07-22</td>
    </tr>
    </tbody>
</table>

<table id="tableBtcSort">
    <thead>
    <tr>
        <th data-type="num" onclick="sortpais('tableBtcSort')">工号</th>
        <th data-type="string"  onclick="sortpais('tableBtcSort')">姓名</th>
        <th data-type="string" onclick="sortpais('tableBtcSort')">性别</th>
        <th data-type="date" onclick="sortpais('tableBtcSort')">时间</th>
    </tr>
    </thead>
    <tbody>
    <tr>
        <td>7</td>
        <td>aaaa</td>
        <td>男</td>
        <td>2012-12-12</td>
    </tr>
    <tr>
        <td>3</td>
        <td>mmmm</td>
        <td>女</td>
        <td>2013-12-16</td>
    </tr>
    <tr>
        <td>1</td>
        <td>$cccc</td>
        <td>男</td>
        <td>2014-12-12</td>
    </tr>
    <tr>
        <td>4</td>
        <td>ffff</td>
        <td>女</td>
        <td>2015-12-12</td>
    </tr>
    <tr>
        <td>-2</td>
        <td>bbbb</td>
        <td>男</td>
        <td>2016-12-18</td>
    </tr>
    <tr>
        <td>6</td>
        <td>ssss</td>
        <td>女</td>
        <td>2008-10-07</td>
    </tr>
    <tr>
        <td>-5</td>
        <td>tttt</td>
        <td>男</td>
        <td>2012-07-22</td>
    </tr>
    </tbody>
</table>
<script src="sort.js?v=33asss66"></script>
<script type="text/javascript">
// (function(){



</script>
</body>
</html>

js

    function sortpais(tableId){
        var tbody = document.querySelector('#'+tableId).tBodies[0];
        var th = document.querySelector('#'+tableId).tHead.rows[0].cells;
        var td = tbody.rows;
        for(var i = 0;i < th.length;i++){
            th[i].flag = 1;
            th[i].onclick = function(){
                sort(this.getAttribute('data-type'),this.flag,this.cellIndex,td,tbody);
                this.flag = -this.flag;
            };
        };
    }

    function sort(str,flag,n,td,tbody){
        var arr = [];
        for(var i = 0;i < td.length;i++){
            arr.push(td[i]);
        };
        arr.sort(function(a,b){
            return method(str,a.cells[n].innerHTML,b.cells[n].innerHTML) * flag;
        });
        for(var i = 0;i < arr.length;i++){
           tbody.appendChild(arr[i]);
        };
    };
    function method(str,a,b){
        switch(str){
            case 'num':
                if (a.indexOf('%')>0) {
                    a=a.replace("%","");
                }
                 if (b.indexOf('%')>0) {
                    b=b.replace("%","");
                } 
                return a-b;
                break;
            case 'string':
                return a.localeCompare(b);
                break;
            default:
                return new Date(a.split('-').join('/')).getTime()-new Date(b.split('-').join('/')).getTime();
        };
    };

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值