zoukankan      html  css  js  c++  java
  • js简单实现表格排序

    昨天看到一篇关于表格排序的随笔,鉴于本人还只会简单的js,不会使用封装,所以自己也试了一下写这个效果。可能不太优化,原理思路是:获取行对象tr,排序tr中要比较的对象td,排序后添加回tbody。如下:

    样式如下:

    <style>
    thead tr td{
        cursor: pointer;
    }
    thead tr td:hover{
        text-decoration: underline;
    }
    </style>

    结构如下:

    <table>
    <thead>
    <tr>
    <td>姓名</td>
    <td>性别</td>
    <td id="score">成绩</td>
    </tr>
    </thead>
    <tbody>
    <tr>
    <td>hoho</td>
    <td>女</td>
    <td>65</td>
    </tr>
    <tr>
    <td>haha</td>
    <td>男</td>
    <td>73</td>
    </tr>
    <tr>
    <td>hehe</td>
    <td>女</td>
    <td>67</td>
    </tr>
    </tbody>
    </table>

    js代码:

    <script>
    var score=document.getElementById('score');
    var tbody=document.getElementsByTagName('tbody')[0];    //获取文档下的第一个tbdoy
    var tr=tbody.getElementsByTagName('tr');     //获取tbody下的tr(数组)
    var arr=[];
    var isAsc=true;   //判断当前排序是否是正序
    score.onclick=function(){
    if(!isAsc){   //如果是反序,则进行一下操作 
    for(var i=0;i<tr.length;i++){
    arr.push(tr[i]);   //把tr数组复制到arr数组
    }
    arr.sort(function(tr1, tr2){    //数组排序arr.sort()
    var value1 = tr1.getElementsByTagName('td')[2].innerHTML;
    var value2 = tr2.getElementsByTagName('td')[2].innerHTML;
    return value2.localeCompare(value1);   //localeCompare() 方法提供的是比较字符串的方法,如果value2>value1,则返回1;如果value2<value1,则返回-1;相等则0
    });
    Oinsert();   //进行文档添加操作
    isAsc=true;  //点击之后反转一下顺序
    } else {   //如果是正序,则进行一下操作
    for(var i=0;i<tr.length;i++){
    arr.push(tr[i]);
    }
    arr.sort(function(tr1, tr2){
    var value1 = tr1.getElementsByTagName('td')[2].innerHTML;
    var value2 = tr2.getElementsByTagName('td')[2].innerHTML;
    return value1.localeCompare(value2);
    });
    Oinsert();
    isAsc=false;
    }
    }

    function Oinsert(){     //向文档添加已排好序的节点
    var fragment=document.createDocumentFragment();   //当你想提取文档的一部分,改变,增加,或删除某些内容及插入到文档末尾可以使用createDocumentFragment() 方法
    for(var j=0;j<arr.length;j++){
    fragment.appendChild(arr[j]);   //把数组中的元素添加到节点的子节点列表的末尾
    }
    tbody.appendChild(fragment);   //把fragment添加到tbody
    }
    </script>

    运行界面:

     

    大家复制代码就可以看到效果啦!

  • 相关阅读:
    Linux终端以及bash
    初识VIM
    基础命令
    目录结构和命令
    Xshell连接Centos7.5和yum
    Linux的发展史和centos7的安装
    学习方法以及计算机硬件基础
    mysql、MariaDB的简单操作
    yum 软件管理器
    基础面试题
  • 原文地址:https://www.cnblogs.com/heyujun-/p/6657028.html
Copyright © 2011-2022 走看看