`
xitonga
  • 浏览: 587637 次
文章分类
社区版块
存档分类
最新评论

利用数组的Sort方法实现表格点击排序

 
阅读更多

这里的重点是对JavaScript数组中的sort方法的运用,例子本身比较简单,具体实现的效果就是:点击thead里面的th时,对应tbody里面的那一列的内容会自动根据大小排序。

有几个实用的知识点:

1、利用js给元素添加index属性,并为其赋索引值

2、sort方法在没有传递参数的情况下是按照ASCII字符顺序排序的,所以当要排序的内容既有数字又有内容为数字的字符串时,最终的排序结果并不是我们想要的,但我们可以给其传递一个自定义排序函数来实现排序,且该比较函数只能比较数字

arr.sort(function (x , y){
    return x - y;
})

现在假设有这样一个表格结构:

<table id="table">
    <thead>
        <tr>
            <th>1</th>
            <th>2</th>
            <th>3</th>
            <th>4</th>
            <th>5</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>17</td>
            <td>5</td>
            <td>12</td>
            <td>3</td>
            <td>1</td>
        </tr>
        <tr>
            <td>7</td>
            <td>4</td>
            <td>6</td>
            <td>1</td>
            <td>9</td>
        </tr>
        <tr>
            <td>13</td>
            <td>6</td>
            <td>4</td>
            <td>29</td>
            <td>5</td>
        </tr>
        <tr>
            <td>8</td>
            <td>2</td>
            <td>6</td>
            <td>3</td>
            <td>9</td>
        </tr>
        <tr>
            <td>6</td>
            <td>12</td>
            <td>8</td>
            <td>3</td>
            <td>5</td>
        </tr>
    </tbody>
</table>

CSS如下:

*{margin:0;padding:0;}
table{border-collapse:collapse;width:200px;margin:50px auto;text-align:center;}
th, td { border: 1px solid #e9e9e9; padding: 10px; }
th{background:#4784a3;color:#fff;cursor:pointer;}

JavaScript如下:

window.onload = function () {
    //获取table和触发点击事件的th元素
    var table = document.getElementById('table');
    var th = table.getElementsByTagName('th');
 
    //遍历th并且给其加上onclick事件
    for (var j = 0; j < th.length; j++) {
        //给每个th都添加一个index属性,并给其赋一个索引值
        th[j].index = j;
        //绑定onclick事件处理函数
        th[j].onclick = function () {
            //获取当前的索引值
            var index = this.index;
            //将需要排序的的body里面的tr全部推到一个数组里面
            var arr = [];
            for (var i = 0; i < table.tBodies[0].rows.length; i++) {
                arr[i] = table.tBodies[0].rows[i];
            }
            //利用数组的sort方法对表格里面的内容进行比较和排序
            arr.sort(function (tr1, tr2) {
                //比较th所在那一列的td里面的内容---注意这里的index为被点击的th的index属性值
                //因为自定义比较函数只能比较数字,所以得用parseInt将其转换为整数类型
                var n1 = parseInt(tr1.cells[index].innerHTML);
                var n2 = parseInt(tr2.cells[index].innerHTML);
                return n1 - n2;
            });
            //将排好序的数组重新插回tbody中
            for (var i = 0; i < arr.length; i++) {
                table.tBodies[0].appendChild(arr[i]);
            }
        }
    }
}

最终效果参加表格排序

关于sort方法可以参见《JavaScript高级程序设计》一书

Ref:http://www.qdfuns.com/archives/2013379





分享到:
评论

相关推荐

    JS实现table表格数据排序功能(可支持动态数据+分页效果)

    数据就是字母和数字两组.(汉字需要找到asc码) 原理就是利用数组自带的sort排序,进行表格重组.已在.net mvc 中测试过.支持分页.(申明一点.只对当前页面数据排序 无刷新,对所有页面排序的话,肯定需要刷新.这点我还在...

    JS中使用sort结合localeCompare实现中文排序实例

    JavaScript为数组提供了sort()方法用于表格排序,默认情况下该方法会使Array中的数组按照ASCII码的顺序进行排列,JavaScript还为数组提供了数组倒序的方法reverse()。 看一下示例: 代码如下:  function sortArray...

    JS简单实现表格排序功能示例

    本文实例讲述了JS简单实现表格排序功能的方法。分享给大家供大家参考,具体如下: 思路:遍历每个li,并把它们存放到数组中去,然后通过sort()方法进行排序,再插入 &lt;!DOCTYPE ...

    Java经典编程源码基础例程300.zip

    实例041 使用sort()方法对数组排序 61 实例042 反转数组中元素的顺序 63 第6章 面向对象入门 65 实例043 自定义图书类 66 实例044 温度单位转换工具 67 实例045 成员变量的默认初始化值 68 实例046 单例模式的应用 ...

    解决vue elementUI中table里数字、字母、中文混合排序问题

    主要介绍了vue elementUI中table里数字、字母、中文混合排序问题,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下

    Vue.js实现多条件筛选、搜索、排序及分页的表格功能

    与上篇实践教程一样,在这篇文章中,我将继续从一种常见的功能——表格入手,展示Vue.js中的一些优雅特性。同时也将对filter功能与computed属性进行对比,说明各自的适用场景,也为vue2.0版本中即将删除的部分filter...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    实例054 使用sort方法对数组进行排序 67 实例055 反转数组中元素的顺序 68 3.4 常用集合的使用 69 实例056 用动态数组保存学生姓名 69 实例057 用List集合传递学生信息 70 实例058 用TreeSet生成不重复自动排序 随机...

    C#开发实例大全(基础卷).软件开发技术联盟(带详细书签) PDF 下载

    实例104 使用Sort方法对数组进行快速排序 124 实例105 反转数组中元素的顺序 125 4.3 常用集合的使用 126 实例106 向班级集合中添加学生信息 126 实例107 使用哈希表对XML文件进行查询 127 实例108 计算两个矩形矩阵...

    easyui帮助手册datagrid

    sortOrder(排序顺序) string(字符串) 定义排序顺序,可以是'asc'或者'desc'(正序或者倒序)。 asc remoteSort(远程排序) boolean(布尔型) 定义是否通过远程服务器对数据排序。 true showFooter(显示行底)...

    react-table-data-sort

    一些核心功能已经实现,但是应用程序不完整。 下面给出了应用程序要求,完成的应用程序必须通过所有单元测试。 该应用程序具有一个名为Articles的组件。 应用程序中已经提供了要显示的文章列表。 该应用程序必须...

    JavaScript王者归来part.1 总数2

     8.2.3.3 sort()方法   8.2.3.4 concat()方法   8.2.3.5 slice()方法   8.2.3.6 splice()方法   8.2.3.7 toSgring()方法和toLocaleString()方法   8.3 哈希表   8.3.1 什么是哈希表   8.3.2 哈希表的...

    PHP和MySQL Web开发第4版pdf以及源码

    3.6.2 使用asort()函数和ksort()函数对相关数组排序 3.6.3 反向排序 3.7 多维数组的排序 3.7.1 用户定义排序 3.7.2 反向用户排序 3.8 对数组进行重新排序 3.8.1 使用shuffle()函数 3.8.2 使用array_reverse()...

    PHP和MySQL WEB开发(第4版)

    3.6.2 使用asort()函数和ksort()函数对相关数组排序 3.6.3 反向排序 3.7 多维数组的排序 3.7.1 用户定义排序 3.7.2 反向用户排序 3.8 对数组进行重新排序 3.8.1 使用shuffle()函数 3.8.2 使用array_reverse()函数 ...

    PHP和MySQL Web开发第4版

    3.6.2 使用asort()函数和ksort()函数对相关数组排序 3.6.3 反向排序 3.7 多维数组的排序 3.7.1 用户定义排序 3.7.2 反向用户排序 3.8 对数组进行重新排序 3.8.1 使用shuffle()函数 3.8.2 使用array_reverse()...

Global site tag (gtag.js) - Google Analytics