为了更直观展现表格的一大堆乱七八糟的数据,合并单元格就派上用场:javascript
效果:css
代码:html
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <!-- 上述3个meta标签*必须*放在最前面,任何其余内容都*必须*跟随其后! --> <title>BootstrapTable合并单元格</title> <!-- Bootstrap --> <link href="css/bootstrap.min.css" rel="stylesheet"> <link href="css/bootstrap-table.min.css" rel="stylesheet"> <!-- HTML5 shim 和 Respond.js 是为了让 IE8 支持 HTML5 元素和媒体查询(media queries)功能 --> <!-- 警告:经过 file:// 协议(就是直接将 html 页面拖拽到浏览器中)访问页面时 Respond.js 不起做用 --> <!--[if lt IE 9]> <script src="https://cdn.jsdelivr.net/npm/html5shiv@3.7.3/dist/html5shiv.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/respond.js@1.4.2/dest/respond.min.js"></script> <![endif]--> </head> <body> <table id="bootstrap-table" class="table table-hover"></table> <!-- jQuery (Bootstrap 的全部 JavaScript 插件都依赖 jQuery,因此必须放在前边) --> <script src="js/jquery.min.js"></script> <!-- 加载 Bootstrap 的全部 JavaScript 插件。你也能够根据须要只加载单个插件。 --> <script src="js/bootstrap.min.js"></script> <!-- 加载 Bootstrap-Table 插件 --> <script src="js/bootstrap-table.min.js"></script> <!-- 汉化插件 --> <script src="js/bootstrap-table-zh-CN.min.js"></script> <script type="application/javascript"> $('#bootstrap-table').bootstrapTable({ url: 'json/data.json', sidePagination: "true", pageSize: "10", pagination: true, // 是否分页 columns: [ { field: 'city', title: '市' }, { field: 'area', title: '区' }, { field: 'gdp', title: 'GDP' } ], onLoadSuccess: function () {//当全部数据被加载时触发处理函数 var data = $('#bootstrap-table').bootstrapTable('getData', true);//获取当前页数据 mergeCells(data,'city',1,$('#bootstrap-table')); }, onPageChange: function (){//当页面更改页码或页面大小时触发 var data = $('#bootstrap-table').bootstrapTable('getData', true); mergeCells(data,'city',1,$('#bootstrap-table')); }, }); function mergeCells(data,fieldName,colspan,target){ //声明一个map计算相同属性值在data对象出现的次数和 var sortMap = {}; for(var i = 0 ; i < data.length ; i++){ for(var prop in data[i]){ if(prop == fieldName){ var key = data[i][prop] //fieldName的value if(sortMap.hasOwnProperty(key)){ sortMap[key] = sortMap[key] * 1 + 1; } else { sortMap[key] = 1; } break; } } } /*for(var prop in sortMap){ console.log(prop,sortMap[prop]) }*/ //合并单元格 var index = 0; for(var prop in sortMap){ var count = sortMap[prop] * 1;
//注意:合并前Java后台Sql要对field字段排序(order by)
//index:合并起始位置,field:合并列名,colspan:合并成一列,rowspan:合并行数 $(target).bootstrapTable('mergeCells',{index:index, field:fieldName, colspan: colspan, rowspan: count}); index += count; } } </script> </body> </html>