您的位置:首页 > 其它

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

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

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

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

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

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

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

1,子表:

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





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

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);
});
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐