bootstrapTable根据动态因子生成动态多行表头

根据项目需要,前端需要实现根据用户选择的因子来生成动态多行表头,经测试发现,多行表头其实就是由多维数组实现,只要将自己的数据按照bootstrapTable数据格式拼接成所对应的数组就可以实现功能,本文为实现代码供大家参考:
【注】前端html页面需要引入对应的库,
如:bootstrap-table.js、bootstrap-table-zh-CN.js、bootstrap-table.css、jquery-2.2.3.min.js;
下载网址:(bootstrap Table)https://bootstrap-table.com/,
(jQuery) https://jquery.com/

一、html

<body>
<div class="content col-xs-12">
    <ul class="itemArea">
        <li role="menuitem" class="checkItem">
            <label><input type="checkbox" checked="" data-code="B01"> 因子一 </label>
        </li>
        <li role="menuitem" class="checkItem">
            <label><input type="checkbox" checked="" data-code="B02"> 因子二 </label>
        </li>
        <li role="menuitem" class="checkItem">
            <label><input type="checkbox" checked="" data-code="B03"> 因子三 </label>
        </li>
    </ul>
    <table class="table table-striped" id="table">
        <!--表格内容-->
    </table>
</div>
</body>

二、Js

<script type="text/javascript">
    $(function () {
        getItemData(); // 获取动态因子数据

        //  监听因子点击事件
        $(".itemArea li label").click(function () {
            getItemData();
        });

    });

    function getItemData() {
        var itemCode=[], //所选择因子的code
            itemName=[];  // 所选择因子的text
        $.each($(".itemArea li input[type='checkbox']"),function () {
            if($(this).is(":checked")){
                itemCode.push($(this).data("code"));
                itemName.push($(this).parents("label").text());
            }
        });

        buildTable(itemName,itemCode); //根据因子选择状态创建表格
    }

    function buildTable(itemName,itemCode) {
        //模拟数据
        var mockData = [
            {
                "province": "浙江省",
                "city": "杭州市",
                "cityLevel": "二线",
                "item0B01": "1",
                "item0B02": "1",
                "item0B03": "1",
                "item1B01": "1",
                "item1B02": "1",
                "item1B03": "1",
                "item2B01": "1",
                "item2B02": "1",
                "item2B03": "1"
            },
            {
                "province": "福建省",
                "city": "福州市",
                "cityLevel": "二线",
                "item0B01": "4",
                "item0B02": "4",
                "item0B03": "4",
                "item1B01": "54",
                "item1B02": "54",
                "item1B03": "54",
                "item2B01": "7",
                "item2B02": "7",
                "item2B03": "7"
            },
            {
                "province": "湖南省",
                "city": "长沙市",
                "cityLevel": "三线",
                "item0B01": "18",
                "item0B02": "22",
                "item0B03": "31",
                "item1B01": "45",
                "item1B02": "74",
                "item1B03": "20",
                "item2B01": "44",
                "item2B02": "16",
                "item2B03": "48"
            }
        ];
        var columns = [],
            initColumns = [],//公共固定列
            itemColumns = []; //动态因子列
        initColumns = [
            {
                field: 'Number',
                title: '',
                width: 35,
                formatter: function (value, row, index) {//自动排序
                    return index + 1;
                },
                rowspan: 2 //合并两行
            }, {
                field: 'province',
                title: '省份',
                width: 80,
                align: "center",
                halign: "center",
                valign: "middle",
                rowspan: 2
            }, {
                field: 'city',
                title: '省会',
                align: "center",
                halign: "center",
                valign: "middle",
                width: 90,
                rowspan: 2
            }, {
                field: 'cityLevel',
                title: '城市级别',
                width: 80,
                align: "center",
                halign: "center",
                valign: "middle",
                rowspan: 2
            }
        ];

        if(itemCode.length>0){
            //根据选择因子绘制动态表头
            for (var i = 0; i < itemCode.length; i++) {
                initColumns.push (
                    {
                        field: "",
                        title: itemName[i] ,
                        width: 80,
                        align: "right",
                        halign: "center",
                        colspan: 3
                    }
                );
                itemColumns.push(
                    {
                        field: 'item' + i + itemCode[i],
                        title: 'item' + itemCode[i],
                        width: 80,
                        align: 'center',
                        halign: 'center'
                    },
                    {
                        field: 'item' + i + itemCode[i],
                        title: 'item' + itemCode[i],
                        width: 80,
                        align: 'center',
                        halign: 'center'
                    },{
                        field: 'item' + i + itemCode[i],
                        title: 'item' + itemCode[i],
                        width: 80,
                        align: 'center',
                        halign: 'center'
                    }
                );
            }
        }
        columns.push(initColumns, itemColumns); //合并表格内容

        $('#table').bootstrapTable('destroy').bootstrapTable({
            data: mockData, //添加模拟数据
            pagination: true,//分页
            minimumCountColumns: 4,//设置最小列数
            paginationLoop: true,
            striped: true,//是否显示行间隔色
            paginationPreText: "上一页",
            paginationNextText: "下一页",
            undefinedText: " ",
            pageNumber: 1,      //初始化加载第一页,默认第一页
            pageSize: 15,
            pageList: [10, 15, 20, 25, 30],
			columns: columns //动态拼接生成表格
        });
    }
</script>

三、效果图
在这里插入图片描述
在这里插入图片描述

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值