zoukankan      html  css  js  c++  java
  • Javascript实现表格行排序

    网站开发中凡是用到表格来展示数据的,往往都要根据某个列来对行排序,下面是我从书上看到的一个行排序例子,看过后受益匪浅,故分享出来。

    直接献上完整代码

    <!doctype html>
    <html lang="en">
    <head>
    <meta  charset="UTF-8" />
    <title>Javascript原生代码实现表格排序</title>
    <script type="text/javascript">
    //根据指定表格每行第n个单元格的值,对第一个tbody中的行进行排序
    //如果存在comparator函数则使用它,否则按字母表顺序比较
    function sortRows(table,n,comparator){
        var tbody = table.tBodies[0];
        var rows = tbody.getElementsByTagName("tr");
        rows  = Array.prototype.slice.call(rows,0);//转化为真实数组
        //基于第n个<td>元素的值对行排序
        rows.sort(function(row1,row2){
            var cell1 = row1.getElementsByTagName("td")[n];
            var cell2 = row2.getElementsByTagName("td")[n];
            var val1 = cell1.textContent || cell1.innerText;//IE兼容
            var val2 = cell2.textContent || cell2.innerText;
            if(comparator) return comparator(val1,val2);
            if(val1<val2) return -1;
            else if(val1>val2) return 1;
            else return 0;
        });
        for(var i=0;i<rows.length;i++) tbody.appendChild(rows[i]);  //原先的会自动移除
    }
    
    //查找表格的<th>元素(假设只有一行),让它们可单击,以便单击该列对行排序
    function makeSortTable(table){
        var headers = table.getElementsByTagName("th");
        for(var i=0;i<headers.length;i++){
            (function(n){ //嵌套函数来创建本地作用域 (这段代码自己也不太懂,自己试过把嵌套函数去掉,但结果出错,希望看懂这段代码的人也教教我)
                headers[i].onclick = function(){sortRows(table,n);};
             }(i));
    
        }
    }
    
    window.onload = function(){
        var table = document.getElementById("table");
        makeSortTable(table);
      }
    </script>
    <style type="text/css">
    table{
        table-layout: auto;
        border-collapse: collapse;
    }
    th{
        border: solid 1px rgb(0,0,0);
        cursor:pointer;
    }
    th:hover{
        background: red;
    }
    td{
        border: solid 1px rgb(0,0,0);
    }
    </style>
    </head>
    <body>
    <table id="table">
    <thead><tr><th>Name</th><th>age</th></tr></thead>
    <tr><td>lhm</td><td>24</td></tr>
    <tr><td>hyl</td><td>25</td></tr>
    <tr><td>hs</td><td>28</td></tr>
    <tr><td>cg</td><td>23</td></tr>
    <tr><td>yqf</td><td>23</td></tr>
    <tr><td>wqz</td><td>38</td></tr>
    <tr><td>xf</td><td>45</td></tr>
    </table>
    </body>
    </html>
  • 相关阅读:
    Oracle 10g 体系结构及安全管理
    Oracle 10g数据库概述
    jQuery Ajax应用
    ASP.NET Ajax核心对象
    ASP.NET XML
    jQuery插件的使用和编写
    jQuery中的Ajax应用
    弹窗下面的页面滚动问题
    报文过长,华为手机自动拦截报文
    手机抓包 配置步骤
  • 原文地址:https://www.cnblogs.com/myboke/p/5242331.html
Copyright © 2011-2022 走看看