根据返回数据显示成table样式(个数不定,去空数据)

2018-09-28  本文已影响0人  ltz就是我

需求:后台返回的各种数据列表,需要展现成table样式

问题:字段显示不固定、为空不显示等,不适用table直接显示;
自定义,也有可能出现边框不一致,如数据为空时缺少边框、边框重叠等

解决:引用jq,js判断,将原本数据结构按要求重新定义,补空为m*n的数据结构,再生成相应的元素。
为了区别table,标签直接使用div

显示示例

exam.png

直接代码

<!-- 样式 -->
<style>
    .tableDiv { 
        width: 600px;
        font-size: 12px;
        margin: 10px auto;
        border: 1px solid #eee;
        border-collapse: collapse;
    } 
    .tableDiv .trDiv{
        display: flex;
        flex-wrap: wrap;
        border-bottom: 1px solid #eee
    }
    .tableDiv .trDiv:last-child{
        border-bottom: none;
    }
    .tableDiv .trDiv .tdDiv{
        flex: 1;
        border-right: 1px solid #eee;
        box-sizing: border-box;
        text-align: center;
        padding: 20px;
    }
    .tableDiv .trDiv .tdDiv:last-child{
        border-right: none;
    }
    .labelTitle{
        font-weight: bold;
        padding-right: 10px;
    }
    .labelSpan{
        color: red;
    }
</style>
<!-- 页面元素 -->
1.一维数组形式
    <div class="tableDiv table0"></div>
2.对象数组,键值对形式
    <div class="tableDiv table1"></div>
3.JSON对象形式
    <div class="tableDiv table2"></div>
$(function(){
    // 三种模拟数据
    var table1Static=[1,23,4,5,44,7,'',,78,9,88,2];
    var table2Static=[{"key":"字段1","val": "322323"},{"key":"字段2","val": "15155"},{"key":"字段3","val": ""},{"key":"字段4","val": "丰富多彩的"},{"key":"字段5","val": "丰富多彩的"}];
    var table3Static={"字段1": "","字段2": "55555","字段3": "","字段4":"丰富多彩的","字段5": "丰富多彩的","字段6": "丰富多彩的"};

    function tableRender(static, status, op){
        // op为表格数据一行显示几个,这里为3
        // status数据结构,其中
        // 0为1维数组[,,,...]
        // 1为对象数组[{"key":"","val":""},{"key":"","val":""},...]
        // 2为json对象{"":"","":"",...}
        var len = static.length,
            lenRow;
        if(status == 0){
            static = static.filter(item=>item!='');
            baseType(len,op,static)
        }else if(status == 1){
            static = static.filter(item=>item.val!='');
            len = static.length;
            referenceType(len,op,static)
        }else if(status == 2){
            var staticNew = [];
            for(var i in static){
                if(static[i] != ''){
                    staticNew.push({"key":i,"val":static[i]})
                }   
            }
            len=staticNew.length;
            static = staticNew;
            referenceType(len,op,static)
        }else{
            // ...
        }

        // 一维数组形式
        function baseType(len,op,static){
            var tableStaticNew = commonType(len,op,static);//len*op的新数组
            for(var i=0; i<lenRow; i++){
                var trDiv=$("<div class='trDiv'></div>");
                for(var j=0; j<op; j++){
                    tableStaticNew[i][j] = tableStaticNew[i][j] == undefined? '' : tableStaticNew[i][j];
                    var tdDiv = $("<div class='tdDiv'>"+tableStaticNew[i][j]+"</div>");
                    trDiv.append(tdDiv);
                }
                $(".table"+status).append(trDiv)
            }
        }
        // 对象类型
        function referenceType(len,op,static){
            var tableStaticNew = commonType(len,op,static);
            for(var i=0; i<lenRow; i++){
                var trDiv=$("<div class='trDiv'></div>");
                for(var j=0; j<op; j++){
                    tableStaticNew[i][j]=tableStaticNew[i][j] == undefined ? {"key":"","val":""} : tableStaticNew[i][j];
                    var tdDiv = $("<div class='tdDiv'><span class='labelTitle'>"+tableStaticNew[i][j].key+"</span><span class='labelSpan'>"+tableStaticNew[i][j].val+"</span></div>");
                    trDiv.append(tdDiv);
                }
                $(".table"+status).append(trDiv)
            }
        }
        // 将数据按一行排列op个,分成len行,返回一个新数组
        function commonType(len,op,static){
            var tableStaticNew = [];
            lenRow = len%op == 0 ? parseInt(len/op) : parseInt(len/op)+1;
            for(var i=0;i<len; i+=op){
                tableStaticNew.push(static.slice(i,i+op));
            }
            console.log(tableStaticNew)
            return tableStaticNew
        }
    }
    tableRender(table1Static,0,4)//一维数组,一行4个
    tableRender(table2Static,1,4)//对象数组,一行4个
    tableRender(table3Static,2,3)//JSON对象,一行3个
})

场景不同,实现方案也不尽相同,本是参杂php语法if condition/empty等判断,效果也实现了;这是后来js判断写的demo,记录下

上一篇下一篇

猜你喜欢

热点阅读