js前端排序

javascript 做前端排序

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>前端排序</title>

<script src="js/jquery-1.6.2.min.js"></script>
</head>
<body>

<script type="text/javascript">

    //转换器,将列的字段类型转换为可以排序的类型:String,int,float
    function convert(sValue, sDataType) {
        switch(sDataType) {
            case "int":
                return parseInt(sValue);
            case "float":
                return parseFloat(sValue);
            case "date":
                return new Date(Date.parse(sValue));
            default:
                return sValue.toString();

        }
    }

    //排序函数产生器,iCol表示列索引,sDataType表示该列的数据类型
    function generateCompareTRs(iCol, sDataType) {

        return  function compareTRs(oTR1, oTR2) {
                    var vValue1 = convert(oTR1.cells[iCol].firstChild.nodeValue, sDataType);
                    var vValue2 = convert(oTR2.cells[iCol].firstChild.nodeValue, sDataType);

                    if (vValue1 < vValue2) {
                        return -1;
                    } else if (vValue1 > vValue2) {
                        return 1;
                    } else {
                        return 0;
                    }
                };
    }

    //排序方法
    function sortTable(sTableID, iCol, sDataType) {
        var oTable = document.getElementById(sTableID);
        var oTBody = oTable.tBodies[0];
        var colDataRows = oTBody.rows;
        var aTRs = new Array;

        //将所有列放入数组
        for (var i=0; i < colDataRows.length; i++) {
            aTRs[i] = colDataRows[i];
        }

        //判断最后一次排序的列是否与现在要进行排序的列相同,是的话,直接使用reverse()逆序
        if (oTable.sortCol == iCol) {
            aTRs.reverse();
        } else {
            //使用数组的sort方法,传进排序函数
            aTRs.sort(generateCompareTRs(iCol, sDataType));
        }

        var oFragment = document.createDocumentFragment();
        for (var i=0; i < aTRs.length; i++) {
            oFragment.appendChild(aTRs[i]);
        }

        oTBody.appendChild(oFragment);
        //记录最后一次排序的列索引
        oTable.sortCol = iCol;
    }

</script>
<p>Click on the table header to sort in ascending order.</p>
<table border="1" id="tblSort">
    <thead>
        <tr>
            <th onclick="sortTable(‘tblSort‘, 0)"
                style="cursor:pointer">Last Name</th>
            <th onclick="sortTable(‘tblSort‘, 1)"
                style="cursor:pointer">First Name</th>
            <th onclick="sortTable(‘tblSort‘, 2, ‘date‘)"
                style="cursor:pointer">Birthday</th>
            <th onclick="sortTable(‘tblSort‘, 3, ‘int‘)"
                style="cursor:pointer">Siblings</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>Smith</td>
            <td>John</td>
            <td>7/12/1978</td>
            <td>2</td>
        </tr>
        <tr>
            <td>Johnson</td>
            <td>Betty</td>
            <td>10/15/1977</td>
            <td>4</td>
        </tr>
        <tr>
            <td>Henderson</td>
            <td>Nathan</td>
            <td>2/25/1949</td>
            <td>1</td>
        </tr>
        <tr>
            <td>Williams</td>
            <td>James</td>
            <td>7/8/1980</td>
            <td>4</td>
        </tr>
        <tr>
            <td>Gilliam</td>
            <td>Michael</td>
            <td>7/22/1949</td>
            <td>1</td>
        </tr>
        <tr>
            <td>Walker</td>
            <td>Matthew</td>
            <td>1/14/2000</td>
            <td>3</td>
        </tr>
    </tbody>
</table>
</body>
</html>

效果 点击上面的标题可按照相应的条件排序:

相关文章http://henryzp.com/?p=599

时间: 2024-09-30 09:15:54

js前端排序的相关文章

原生JS实现排序和分页的代码

原文:原生JS实现排序和分页的代码 代码下载地址:http://www.zuidaima.com/share/1550463246568448.htm 这个也是在网上下的,开始觉得不错,不过毕竟是插件. 标签: js 分页 排序 插件 话题: Web开发 前端技术 原生JS实现排序和分页的代码

前端排序算法总结;前端面试题2.0;JavaScript异步编程

1.前端 排序算法总结 排序算法可能是你学编程第一个学习的算法,还记得冒泡吗? 当然,排序和查找两类算法是面试的热门选项.如果你是一个会写快排的程序猿,面试官在比较你和一个连快排都不会写的人的时候,会优先选择你的.那么,前端需要会排序吗?答案是毋庸置疑的,必须会.现在的前端对计算机基础要求越来越高了,如果连排序这些算法都不会,那么发展前景就有限了.本篇将会总结一下,在前端的一些排序算法. https://segmentfault.com/a/11... 2.前端面试题 V2.0 详见: 这是一份

闲话js前端框架(2)——庞大的angularjs

闲话js前端框架 前端人员=美工+设计+代码+测试 --题记 专题文章: 一.从avalonjs的模板说起 二.庞大的angularjs 三.再也不想碰DOM 四.组件化?有没有后端的事? 五.再看自己一年前设计的微型渲染引擎 六.在浏览器标准上做文章 七.抛开浏览器,构建应用容器 八.为何Flash.银光和Java都在网页端一蹶不振 本文属 西风逍遥游 原创, 转载请注明出处: 西风世界 http://blog.csdn.net/xfxyy_sxfancy 二.庞大的angularjs Ang

闲话js前端框架(6)——在浏览器标准上做文章

闲话js前端框架 前端人员=美工+设计+代码+测试 --题记 专题文章: 一.从avalonjs的模板说起 二.庞大的angularjs 三.再也不想碰DOM 四.组件化?有没有后端的事? 五.再看自己一年前设计的微型渲染引擎 六.在浏览器标准上做文章 七.抛开浏览器,构建应用容器 八.为何Flash.银光和Java都在网页端一蹶不振 本文属 西风逍遥游 原创, 转载请注明出处: 西风世界 http://blog.csdn.net/xfxyy_sxfancy 六.在浏览器标准上做文章 为了简化前

[Js]表格排序

思路:遍历每个li,病并把它们存放到数组中去,然后通过sort()方法进行排序 <body>    <input type="button" value="排序按钮" id="btn1">    <ul id="ul1">        <li>58</li>        <li>8</li>        <li>31</

浅析js前端发展及mvvm的选型

最近终于下定决心学点前端的东西,然而各种框架,让人眼花缭乱. 先总结一下js前端的发展史 1.刀耕火种,原始时代 这个时候用DOM原生API来操html元素,估计getElementBy之类的函数满天飞 2.蒸汽机,工业时代 jquery等之类的框架出现,DOM操作被框架封装好,可以很方便的更新 3.电能,后工业时代 react.vue.angular.avalon等mvvm的出现,忘记操作DOM 说起mvvm实际上变量绑定,把DOM和js变量绑定,更新js变量就可以达到更新DOM的目的,或者双

闲话js前端框架(1)——从avalonjs的模板说起

闲话js前端框架 前端人员=美工+设计+代码+测试 --题记 专题文章: 一.从avalonjs的模板说起 二.庞大的angularjs 三.再也不想碰DOM 四.组件化?有没有后端的事? 五.再看自己一年前设计的微型渲染引擎 六.在浏览器标准上做文章 七.抛开浏览器,构建应用容器 八.为何Flash.银光和Java都在网页端一蹶不振 本文属 西风逍遥游 原创, 转载请注明出处: 西风世界 http://blog.csdn.net/xfxyy_sxfancy 一.从avalonjs的模板说起 我

闲话js前端框架(4)——组件化?有没有后端的事?

闲话js前端框架 前端人员=美工+设计+代码+测试 --题记 专题文章: 一.从avalonjs的模板说起 二.庞大的angularjs 三.再也不想碰DOM 四.组件化?有没有后端的事? 五.再看自己一年前设计的微型渲染引擎 六.在浏览器标准上做文章 七.抛开浏览器,构建应用容器 八.为何Flash.银光和Java都在网页端一蹶不振 本文属 西风逍遥游 原创, 转载请注明出处: 西风世界 http://blog.csdn.net/xfxyy_sxfancy 四.组件化?有没有后端的事? 提到组

闲话js前端框架(5)——再看自己一年前设计的微型渲染引擎

闲话js前端框架 前端人员=美工+设计+代码+测试 --题记 专题文章: 一.从avalonjs的模板说起 二.庞大的angularjs 三.再也不想碰DOM 四.组件化?有没有后端的事? 五.再看自己一年前设计的微型渲染引擎 六.在浏览器标准上做文章 七.抛开浏览器,构建应用容器 八.为何Flash.银光和Java都在网页端一蹶不振 本文属 西风逍遥游 原创, 转载请注明出处: 西风世界 http://blog.csdn.net/xfxyy_sxfancy 五.再看自己一年前设计的微型渲染引擎