zoukankan      html  css  js  c++  java
  • 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);
    });


  • 相关阅读:
    Auto Complete with Redis
    老男孩 movie
    e人e本
    邀请大家使用dropbox
    mac Espresso
    it网站
    To Trie or not to Trie – a comparison of efficient data structures
    [转载]提高Python程序的运行速度_李小红_新浪博客
    TSTTernary Search TreeCreating An English Dictionary for lookup and spell checking | CracktheInterview
    平衡二叉搜索树
  • 原文地址:https://www.cnblogs.com/catprayer/p/2827792.html
Copyright © 2011-2022 走看看