`

JS表格排序

    博客分类:
  • js
阅读更多

自写的JS表格排序,目前仅支持数字排序,其他的可以扩展sort和配置来实现,并且目前只支持单行表头

 

<title>JS表格排序</title>
<script type="text/javascript">
var tableSort = {};
(function() {
    var oTable = {};
    var cellStatus = {};
    var sortCells = {};
    var limit = {};
    var $ = function(id) {
        return document.getElementById(id);
    }
 var objKeyExists = function(key, search) {
        if (typeof key != 'number' && typeof key != 'string') {
            return false;
        }
        for (k in search) {
            if (k == key) {
                return true;
            }
        }
        return false;
    }
    var _addEvent = function(tableId, cellId) {
        oTable[tableId].rows[0].cells[cellId].onclick = function() {
            tableSort.sort(tableId, cellId);
        }
    }
    var _addStyle = function(tableId, cellId) {
        oTable[tableId].rows[0].cells[cellId].style.cursor = 'pointer';
    }
    var _addTitle = function(tableId, cellId) {
        oTable[tableId].rows[0].cells[cellId].title = '点击排序';
    }
    var _sortTable = function(tableId, cellId) {
        var rows = oTable[tableId].tBodies[0].rows;
        var _rows = [];
        for (var i = 1; i < rows.length; i++) {
            _rows.push(rows[i]);
        }
        var status = -1;
        if (objKeyExists(cellId, cellStatus[tableId])) {
            status = 0 - cellStatus[tableId][cellId];
        }
        cellStatus[tableId][cellId] = status;
        if (status == 1) {
            oTable[tableId].rows[0].cells[cellId].innerHTML += '&nbsp;<span style="font-family:webdings;">5</span>';
            _rows.sort((function(id){
                return function(a, b) {
                    return _sort(a, b, id);
                }
            }(cellId)));
        } else {
            oTable[tableId].rows[0].cells[cellId].innerHTML += '&nbsp;<span style="font-family:webdings;">6</span>';
            _rows.sort((function(id){
                return function(a, b) {
                    return _rsort(a, b, id);
                }
            }(cellId)));
        }
        var oFragment = document.createDocumentFragment();
        for (var i = 0; i < _rows.length; i++) {
            _rows[i].className = i % 2 ? 'tr' : 'tr_spec';
            _rows[i].cells[0].className =  i % 2 ? 'td_spec2' : 'td_spec1';
            if (limit[tableId] > 0) {
                if (i >= limit[tableId]) {
                    _rows[i].style.display = 'none';
                } else {
                    _rows[i].style.display = '';
                }
            }
            oFragment.appendChild(_rows[i]);
        }
        oTable[tableId].tBodies[0].appendChild(oFragment);
    }
    var _cleanStatus = function(tableId, cellId) {
        for(var i = 0; i < sortCells[tableId].length; i++) {
            oTable[tableId].rows[0].cells[sortCells[tableId][i]].innerHTML = oTable[tableId].rows[0].cells[sortCells[tableId][i]].innerHTML.replace(/&nbsp;<span style=\"font-family\: webdings\">[56]<\/span>$/ig, '');
        }
    }
    var _sort = function(a, b, id) {
        var param1 = a.cells[id].innerText;
        var param2 = b.cells[id].innerText;
        param1 = param1.replace(/[^\d.-]/g, '');
        param2 = param2.replace(/[^\d.-]/g, '');
        if (param1 == '-' || param1 == '') {
            return 1;
        }
        if (param2 == '-' || param2 == '') {
            return -1;
        }
        //如果两个参数均为字符串类型
        if (isNaN(param1) && isNaN(param2)){
            return param1.localeCompare(param2);
        }
        //如果参数1为数字,参数2为字符串
        if (!isNaN(param1) && isNaN(param2)){
            return -1;
        }
        //如果参数1为字符串,参数2为数字
        if (isNaN(param1) && !isNaN(param2)){
            return 1;
        }
        //如果两个参数均为数字
        if (!isNaN(param1) && !isNaN(param2)){
            if (Number(param1) > Number(param2)) {
                return 1;
            }
            if (Number(param1) == Number(param2)) {
                return 0;
            }
            if (Number(param1) < Number(param2)) {
                return -1;
            }
        }
        //return a.cells[id].innerText - b.cells[id].innerText;
    }
    var _rsort = function(a, b, id) {
        var param1 = b.cells[id].innerText;
        var param2 = a.cells[id].innerText;
        param1 = param1.replace(/[^\d.-]/g, '');
        param2 = param2.replace(/[^\d.-]/g, '');
        if (param1 == '-' || param1 == '') {
            return -1;
        }
        if (param2 == '-' || param2 == '') {
            return 1;
        }
        //如果两个参数均为字符串类型
        if (isNaN(param1) && isNaN(param2)){
            return param1.localeCompare(param2);
        }
        //如果参数1为数字,参数2为字符串
        if (!isNaN(param1) && isNaN(param2)){
            return -1;
        }
        //如果参数1为字符串,参数2为数字
        if (isNaN(param1) && !isNaN(param2)){
            return 1;
        }
        //如果两个参数均为数字
        if (!isNaN(param1) && !isNaN(param2)){
            if (Number(param1) > Number(param2)) {
                return 1;
            }
            if (Number(param1) == Number(param2)) {
                return 0;
            }
            if (Number(param1) < Number(param2)) {
                return -1;
            }
        }
        //return b.cells[id].innerText - a.cells[id].innerText;
    }
    tableSort = {
        init : function(tableId, cells, rows) {
            oTable[tableId] = $(tableId);
            sortCells[tableId] = cells;
            cellStatus[tableId] = {};
            limit[tableId] = rows ? rows : 0;
            for (var i = 0; i < cells.length; i++) {
                _addEvent(tableId, cells[i]);
                _addStyle(tableId, cells[i]);
                _addTitle(tableId, cells[i]);
            }
            if (rows > 0) {
                for (var i = 1; i < $(tableId).rows.length; i++) {
                    if (i > rows) {
                        $(tableId).rows[i].style.display = 'none';
                    }
                }
            }
        },
        sort : function(tableId, cellId) {
            _cleanStatus(tableId, cellId);
            _sortTable(tableId, cellId);
        }
    }
})();
</script>
<style type="text/css">
*{font-size:12px;}
</style>
<table id="t1" width="400" border="1">
  <tr>
    <td>第一列</td>
    <td>第二列</td>
    <td>第三列</td>
    <td>第四列</td>
    <td>第五列</td>
  </tr>
  <tr>
    <td>1</td>
    <td>4</td>
    <td>-0.1</td>
    <td>2009-01-01</td>
    <td>-</td>
  </tr>
  <tr>
    <td>2</td>
    <td>3</td>
    <td>-0.3</td>
    <td>2008-01-01</td>
    <td>-</td>
  </tr>
  <tr>
    <td>3</td>
    <td>2</td>
    <td>4</td>
    <td>2008-03-01</td>
    <td>-</td>
  </tr>
  <tr>
    <td>4</td>
    <td>1</td>
    <td>-0.1</td>
    <td>2009-02-01</td>
    <td>-</td>
  </tr>
</table>
<br />
<table id="t2" width="400" border="1">
  <tr>
    <td>第一列</td>
    <td>第二列</td>
    <td>第三列</td>
    <td>第四列</td>
    <td>第五列</td>
  </tr>
  <tr>
    <td>1</td>
    <td>4</td>
    <td>-0.1</td>
    <td>2009-01-01</td>
    <td>-</td>
  </tr>
  <tr>
    <td>2</td>
    <td>3</td>
    <td>-0.3</td>
    <td>2008-01-01</td>
    <td>-</td>
  </tr>
  <tr>
    <td>3</td>
    <td>2</td>
    <td>4</td>
    <td>2008-03-01</td>
    <td>-</td>
  </tr>
  <tr>
    <td>4</td>
    <td>1</td>
    <td>-0.1</td>
    <td>2009-02-01</td>
    <td>-</td>
  </tr>
</table>
<script type="text/javascript">
tableSort.init('t1', [0, 1, 2, 3]);
tableSort.init('t2', [0, 1, 2, 3], 2);
</script>

分享到:
评论

相关推荐

    Blue Table,Js表格排序插件

    **Blue Table:JavaScript表格排序插件** 在网页开发中,数据展示经常需要用到表格,而对表格数据进行排序是用户交互中的常见需求。Blue Table是一款基于JavaScript的表格排序插件,它能够帮助开发者轻松实现表格...

    JavaScript 表格排序

    JavaScript 表格排序双击可进行按表格列排序

    Javascript表格排序大全

    JavaScript表格排序大全是一个涵盖多种JS表格排序实现方法的资源集合,旨在帮助开发者快速实现动态、交互式的表格数据排序功能。在网页开发中,表格是一种常用的数据展示方式,而JavaScript能够为表格提供强大的交互...

    实用的js表格排序功能

    在实际应用中,JavaScript表格排序通常涉及到以下步骤: 1. **获取表格数据**:通过DOM操作获取表格的行(tr)和单元格(td),将其转换为数组或其他数据结构。 2. **定义排序规则**:确定根据哪一列进行排序,以及...

    js表格排序、支持中文、日期、英文、数值排序

    收集起来js表格排序、支持中文、日期、英文、数值排序,多个Javascript表格排序方法,完美解决

    js 表格排序

    这个"js 表格排序"主题主要关注如何利用JavaScript在客户端实现表格数据的动态排序。JavaScript是一种强大的客户端脚本语言,它允许我们在用户的浏览器上直接处理数据,而无需频繁地与服务器进行交互,从而提高应用...

    很灵活的javascript 表格排序 功能强大 可自定义排序规则

    JavaScript表格排序是一个在网页开发中常见的需求,尤其是在处理大量数据时。这个功能强大的JavaScript库,被称为"sorttable",能够帮助开发者轻松实现表格数据的排序,同时提供了自定义排序规则的能力,大大增强了...

    javascript表格排序案例(面向对象)案例资料

    通过以上步骤,你将能够构建一个功能完善的JavaScript表格排序功能,同时利用面向对象编程的思想提高了代码的可维护性和复用性。在学习这个案例资料时,务必仔细研究每个部分,理解其背后的逻辑,并尝试自己动手实践...

    javascript表格排序(顺序和逆序)并高亮显示

    总结来说,实现JavaScript表格排序并高亮显示的关键在于理解DOM操作、数组排序以及CSS样式的应用。通过编写比较函数、遍历和排序表格行,以及更新单元格样式,我们可以创建出具有动态排序和高亮功能的表格。这个过程...

    javascript 表格排序多种数据类型排序(中文混合数字排序).zip

    总结来说,处理JavaScript表格中中文混合数字的排序需要自定义排序函数,该函数能区分并适当地处理不同数据类型。通过这样的方法,我们可以确保数据在展示时始终按预期的方式排序,提供良好的用户体验。这个压缩包...

    javaScript对表格排序

    总结起来,这个JavaScript表格排序示例展示了如何通过监听表头点击事件,使用纯JavaScript实现表格数据的动态排序。它依赖于HTML表格结构,通过JavaScript操作DOM节点进行数据比较和位置交换。在实际项目中,可以...

    js排序表格,实现按列排序

    "js排序表格,实现按列排序"这个主题主要涉及JavaScript(js)如何用于实现对HTML表格的动态排序,同时结合CSS样式提升表格的美观度。 首先,我们需要理解HTML表格的基本结构,它由`&lt;table&gt;`标签定义,内部包含`...

    js实现表格排序

    用js实现对表格的排序,小demo一个,希望对新手们有点帮助

    超级简单JS表格排序

    超简单表格排序超简单表格排序超简单表格排序超简单表格排序超简单表格排序超简单表格排序超简单表格排序超简单表格排序超简单表格排序

    js表格排序

    JavaScript表格排序是一个常见的需求,特别是在网页交互式数据展示中。这个话题主要涵盖了如何使用JavaScript来实现对HTML表格数据的动态排序。在这个过程中,我们将探讨以下几个关键知识点: 1. **HTML表格结构**...

    xml+xslt + js表格排序

    标题中的“XML+XSLT+JS表格排序”是指一种基于Web的技术组合,用于创建可交互的数据展示。XML(eXtensible Markup Language)是一种标记语言,常用于存储和传输结构化数据。XSLT(XSL Transformations)是用于转换...

Global site tag (gtag.js) - Google Analytics