Table sort,html table 列排序

/* By Sk 2013.01.30*/
var tableSort = function () {
    this.initialize.apply(this, arguments);
}

tableSort.prototype = {

    initialize: function (tableId, clickRow, startRow, endRow, classUp, classDown, selectClass) {
        this.Table = document.getElementById(tableId);
        this.rows = this.Table.rows; //所有行 
        this.Tags = this.rows[clickRow - 1].cells; //标签td 
        this.up = classUp;
        this.down = classDown;
        this.startRow = startRow;
        this.selectClass = selectClass;
        this.endRow = (endRow == 999 ? this.rows.length : endRow);
        this.T2Arr = this._td2Array(); //所有受影响的td的二维数组 
        this.setShow();
    },
    //设置标签切换 
    setShow: function () {
        var defaultClass = this.Tags[0].className;
        for (var Tag, i = 0; Tag = this.Tags[i]; i++) {
            Tag.index = i;
            addEventListener(Tag, 'click', Bind(Tag, statu));
        }
        var _this = this;
        var turn = 0;
        function statu() {
            for (var i = 0; i < _this.Tags.length; i++) {
                _this.Tags[i].className = defaultClass;
            }
            if (turn == 0) {
                addClass(this, _this.down)
                _this.startArray(0, this.index);
                turn = 1;
            } else {
                addClass(this, _this.up)
                _this.startArray(1, this.index);
                turn = 0;
            }
        }
    },
    //设置选中列样式 
    colClassSet: function (num, cla) {
        //得到关联到的td 
        for (var i = (this.startRow - 1); i < (this.endRow); i++) {
            for (var n = 0; n < this.rows[i].cells.length; n++) {
                removeClass(this.rows[i].cells[n], cla);
            }
            addClass(this.rows[i].cells[num], cla);
        }
    },
    //开始排序 num 根据第几列排序 aord 逆序还是顺序 
    startArray: function (aord, num) {
        var afterSort = this.sortMethod(this.T2Arr, aord, num); //排序后的二维数组传到排序方法中去 
        this.array2Td(num, afterSort); //输出 
    },
    //将受影响的行和列转换成二维数组 
    _td2Array: function () {
        var arr = [];
        for (var i = (this.startRow - 1), l = 0; i < (this.endRow); i++, l++) {
            arr[l] = [];
            for (var n = 0; n < this.rows[i].cells.length; n++) {
                arr[l].push(this.rows[i].cells[n].innerHTML);
            }
        }
        return arr;
    },
    //根据排序后的二维数组来输出相应的行和列的 innerHTML 
    array2Td: function (num, arr) {
        this.colClassSet(num, this.selectClass);
        for (var i = (this.startRow - 1), l = 0; i < (this.endRow); i++, l++) {
            for (var n = 0; n < this.Tags.length; n++) {
                this.rows[i].cells[n].innerHTML = arr[l][n];
            }
        }
    },
    //传进来一个二维数组,根据二维数组的子项中的w项排序,再返回排序后的二维数组 
    sortMethod: function (arr, aord, w) {
        //var effectCol = this.getColByNum(whichCol); 
        arr.sort(function (a, b) {
            x = killHTML(a[w]);
            y = killHTML(b[w]);
            x = x.replace(/,/g, '');
            y = y.replace(/,/g, '');
            switch (isNaN(x)) {
                case false:
                    return Number(x) - Number(y);
                    break;
                case true:
                    return x.localeCompare(y);
                    break;
            }
        });
        arr = aord == 0 ? arr : arr.reverse();
        return arr;
    }
}
/*-----------------------------------*/
function addEventListener(o, type, fn) {
    if (o.attachEvent) { o.attachEvent('on' + type, fn) }
    else if (o.addEventListener) { o.addEventListener(type, fn, false) }
    else { o['on' + type] = fn; }
}

function hasClass(element, className) {
    var reg = new RegExp('(\\s|^)' + className + '(\\s|$)');
    return element.className.match(reg);
}

function addClass(element, className) {
    if (!this.hasClass(element, className)) {
        element.className += " " + className;
    }
}

function removeClass(element, className) {
    if (hasClass(element, className)) {
        var reg = new RegExp('(\\s|^)' + className + '(\\s|$)');
        element.className = element.className.replace(reg, ' ');
    }
}

var Bind = function (object, fun) {
    return function () {
        return fun.apply(object, arguments);
    }
}
//去掉所有的html标记 
function killHTML(str) {
    return str.replace(/<[^>]+>/g, "");
}
var temp = new tableSort('tableid', 1, 2, 999, 'up', 'down', 'hov');
//tableid  表格ID
//1,第一行为列头
//2,第二行开始排序
//999,第999行结束(999为最后)
//up 升序标签样式
//down 降序标签样式
//hov 选中列样式

el-table 是 Element UI 提供的表格组件,sort-method 属性用于自定义表格的排序方式。具体步骤如下: 1. 在 el-table 组件上绑定 :data 属性,绑定表格需要显示的数据。 2. 在 el-table-column 组件上绑定 :prop 属性,绑定该所对应的数据字段。 3. 在 el-table-column 组件上绑定 :sortable="customSort" 属性,开启该排序功能,同时传入一个自定义的排序函数。 4. 在 el-table 组件上绑定 :sort-method="sortTable" 属性,将自定义的排序函数传入表格组件。 示例代码如下: ```html <template> <el-table :data="tableData" :sort-method="sortTable"> <el-table-column prop="name" label="姓名" :sortable="customSort"></el-table-column> <el-table-column prop="age" label="年龄" :sortable="customSort"></el-table-column> <el-table-column prop="gender" label="性别" :sortable="customSort"></el-table-column> </el-table> </template> <script> export default { data() { return { tableData: [ { name: '张三', age: 18, gender: '男' }, { name: '李四', age: 20, gender: '女' }, { name: '王五', age: 22, gender: '男' }, { name: '赵六', age: 19, gender: '女' } ] } }, methods: { customSort(sortObj) { // 如果需要自定义排序方式,可以在这里添加代码 return true; }, sortTable(sortObj) { // 根据 sortObj 对表格数据进行排序 const { prop, order } = sortObj; this.tableData.sort((a, b) => { const aValue = a[prop]; const bValue = b[prop]; if (order === 'ascending') { return aValue > bValue ? 1 : -1; } else { return aValue < bValue ? 1 : -1; } }); } } } </script> ``` 在上面的示例代码中,我们通过实现 sortTable 方法来自定义表格的排序方式。该方法接收一个 sortObj 参数,包含当前排序的字段和排序方式(升序或降序)。我们通过对 tableData 数组进行排序,来实现表格数据的排序
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值