sTable - 一个支持子表、单元格合并、链式调用、事件代理功能的Mini表格组件

因为项目开发需要,所以开发了此Mini表格组件,暂时不依赖第三方库,比较轻量级,并且支持子表、单元格合并、链式调用、事件代理功能。

演示地址:http://sandbox.runjs.cn/show/ihwmi3yt

在线源码:http://runjs.cn/code/ihwmi3yt

Github:https://github.com/guananddu/sTable

网盘:http://dl.vmall.com/c0aw4lauhu

感兴趣的话可以直接拿来使用。:) 演示见下:

1,子表:

现在只支持一级子表,如下截图:

image

需要更多的子表的话,只能扩展函数本身了。

2,单元格合并:

单元格合并要在初始化的时候进行设置,详见源代码:

// 设置子表单元格合并等信息
    sFormatMore: [
        {
            // 第一列为竖向和并列
            rowSpan: true
        }, 
        {
            // 第二列横跨父表格2个格
            colSpan: '2'
        }, 
        {}, 
        {
            rowSpan: true
        }
    ]

3,链式调用和事件代理:

// 生成构造函数
var myTableConstructor = sTable(preOpt);
// 表格初始化
var meTable = new myTableConstructor(conOpt);
// 渲染
meTable.setData(data).render()

/**
 * 表格的事件代理机制
 */

// 可以通过自身的on函数进行特殊的事件绑定
// 1,为展开/闭合子表格添加自定义事件
.on('click', 'sub-icon', function() {
    var target = this;
    // 可以通过target中的data属性得到当前表格的索引
    var data   = target.getAttribute('data');
    var x      = data.split('-')[0];
    var y      = data.split('-')[1];

    // x 行数索引,y 列说索引(都是从0开始)
    console.log(x, y);
})

// 2,在位其它目标元素添加事件代理的时候需要为其加上'_stabletarget_'属性,表明事件target是什么
.on('mouseover', 'linecheckbox', function() {
    this.setAttribute('title', '点我吧!');
    this.parentNode.style.backgroundColor = 'pink';
})
.on('mouseout', 'linecheckbox', function() {
    this.setAttribute('title', '');
    this.parentNode.style.backgroundColor = '#EFEFEF';
})
.on('click', 'linecheckbox', function() {
    // 去掉全选
    if(!this.checked) {
        meTable.getStableTargetEles('lefttopcheckbox', function(item, inx, arr) {
            item.checked = false;
        })
    }
    else {
        // 注意全选
        var allChecked = true;
        this.checked 
            && meTable.getStableTargetEles('linecheckbox', function(item, inx, arr) {
                !item.checked && (allChecked = false);
            });
        allChecked 
            && meTable.getStableTargetEles('lefttopcheckbox', function(item, inx, arr) {
                item.checked = true;
            });
    }
})

// 3,通过表格的getStableTargetEles方法,获取指定'_stabletarget_'值的元素列表
.on('click', 'lefttopcheckbox', function() {
    var target       = this;
    // 使用内置迭代器
    // meTable.getStableTargetEles('linecheckbox', function(item, inx, arr) {
    //     console.log(inx);
    //     item.checked = target.checked;
    // });
    
    // 不使用内置迭代器
    meTable.getStableTargetEles('linecheckbox', function(all) {
        console.log(all);
        // 不使用内置迭代器的话,自定义循环语句
        for(var i = 0, len = all.length; i < len; all[i ++].checked = target.checked){}
    }, false);
});
posted @ 2012-12-21 13:15  无墨来点睛  Views(1762)  Comments(2Edit  收藏  举报