网站首页 手机版
 注册 登录
您现在的位置: 畅无忧设计 >> 网页特效 >> 表格图层 >> 正文
最新文章
· JS代码实现单元格移动效果
· JavaScript让表格的边框闪烁起来
· 网页Div层拖拽--Clone特效代码
· 可拖动的DIV层
· 简单拖曵的原理与实例
· 上传图片之前先预览图片
· 漂亮的Js拖动层,窗口拖拽(改变大小
· 隔行换色,鼠标划过改变颜色
· Js点击文字弹出层,点击层以外区域关
· CSS自动竖向排列的布局方法
热门文章
 js实现div区域块伸缩效果(toggle)
 js弹出层组件artDialog2.1正式版
 一个简单实用的jquery拖动插件jque
 JS仿EXCEL表格功能
 点击页面任何地方,将div隐藏,除了
 动态插入、添加删除表格行的JS代码
 带遮罩效果并可以拖动的DIV弹出层
 Js点击文字弹出层,点击层以外区域
 利用js向表格动态追加行
 JQuery EasyValidator表单验证插件
相关文章
表格边框流动着色彩,不断变化颜色
JavaScript 动为表格的每一行增加序号
JS表格按列排序
来源:站长资源网 更新时间:2010/8/11 11:58:12 阅读次数: 我要投稿
△运行 ☉预览 #复制 +收藏
特效代码:
<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 += ' <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 += ' <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(/ <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>
△运行 ☉预览 #复制 +收藏
特效说明:
自写的JS表格排序,目前仅支持数字排序,其他的可以扩展sort和配置来实现,并且目前只支持单行表头,欢迎一起交流。
  • 上一篇文章:
  • 下一篇文章:
  • 关于我们 - 联系我们 - 广告服务 - 在线投稿 - 友情链接 - 网站地图 - 版权声明
    CopyRight 2008-2010, CWYDESIGN.COM - 畅无忧设计, Inc. All Rights Reserved
    滇ICP备09005765号