BootStrap table表格插件自适应固定表头(超好用)
首先是简单的页面形式,大家可以按照平常画表格的方式来创建html表格,然后通过js控制特殊的样式等操作(优点是表格更加直观,方便调整表格样式等,速度快)
当然,也可以只在页面上放一个table标签,之后的所有数据和样式都通过js控制也是可以的,后面会说(优点方便控制修改数据,尤其是ajax方式获取的json格式,但是调整样式比较麻烦)
ps:这个是插件的官网,里面有英文api和例子:http://bootstrap-table.wenzhixin.net.cn/zh-cn/
还有,使用前请引入bootstrap的相关css,js,jQuery,以及bootstrap-table的css,js至少这5个基本文件
一,html表格方式
例一:需求,简单的表格数据呈现,表头是两行,还有一个上下浮的箭头
分析:很简单,只需要html就可以实现,按照常规的表格来画,添加上bootstrap-table独有的自定义属性即可,注意如果不使用js请在最开始的table标签中加上data-toggle
html代码:
<div> <tabledata-toggle="table"data-height="268"class="tabletable-stripedtable-borderedtable-hover"id="tableL01"> <thead> <tr> <thdata-field="lhc"data-rowspan="2"data-align="center"data-valign="middle">来耗存</th> <thdata-field="dr"data-colspan="3"data-align="center"data-valign="middle">当日</th> <thdata-field="bz"data-colspan="3"data-align="center"data-valign="middle">本周</th> <thdata-field="by"data-colspan="3"data-align="center"data-valign="middle">本月</th> </tr> <tr> <thdata-field="drbq"data-align="center"data-valign="middle">本期</th> <thdata-field="drtb"data-align="center"data-valign="middle">同比</th> <thdata-field="drhb"data-align="center"data-valign="middle">环比</th> <thdata-field="bzbq"data-align="center"data-valign="middle">本期</th> <thdata-field="bztb"data-align="center"data-valign="middle">同比</th> <thdata-field="bzhb"data-align="center"data-valign="middle">环比</th> <thdata-field="bybq"data-align="center"data-valign="middle">本期</th> <thdata-field="bytb"data-align="center"data-valign="middle">同比</th> <thdata-field="byhb"data-align="center"data-valign="middle">环比</th> </tr> </thead> <tbody> <tr> <td>来煤量</td> <td>21341</td> <td><iclass='glyphiconglyphicon-arrow-down'></i>0.31</td> <td><iclass='glyphiconglyphicon-arrow-up'></i>0.21</td> <td>334322</td> <td><iclass='glyphiconglyphicon-arrow-down'></i>1.13</td> <td><iclass='glyphiconglyphicon-arrow-up'></i>4.21</td> <td>3125113</td> <td><iclass='glyphiconglyphicon-arrow-down'></i>2.21</td> <td><iclass='glyphiconglyphicon-arrow-up'></i>2.94</td> </tr> <tr> <td>来煤量</td> <td>76573</td> <td><iclass='glyphiconglyphicon-arrow-down'></i>4.21</td> <td><iclass='glyphiconglyphicon-arrow-up'></i>1.45</td> <td>234534</td> <td><iclass='glyphiconglyphicon-arrow-down'></i>4.35</td> <td><iclass='glyphiconglyphicon-arrow-up'></i>2.75</td> <td>44225</td> <td><iclass='glyphiconglyphicon-arrow-down'></i>0.74</td> <td><iclass='glyphiconglyphicon-arrow-up'></i>3.45</td> </tr> <tr> <td>耗煤量</td> <td>43363</td> <td><iclass='glyphiconglyphicon-arrow-down'></i>0.31</td> <td><iclass='glyphiconglyphicon-arrow-up'></i>0.21</td> <td>32422</td> <td><iclass='glyphiconglyphicon-arrow-down'></i>1.13</td> <td><iclass='glyphiconglyphicon-arrow-up'></i>4.21</td> <td>13345</td> <td><iclass='glyphiconglyphicon-arrow-down'></i>2.21</td> <td><iclass='glyphiconglyphicon-arrow-up'></i>2.94</td> </tr> <tr> <td>来煤量</td> <td>34624</td> <td><iclass='glyphiconglyphicon-arrow-down'></i>4.35</td> <td><iclass='glyphiconglyphicon-arrow-up'></i>1.23</td> <td>452346</td> <td><iclass='glyphiconglyphicon-arrow-down'></i>2.32</td> <td><iclass='glyphiconglyphicon-arrow-up'></i>0.05</td> <td>94524</td> <td><iclass='glyphiconglyphicon-arrow-down'></i>2.21</td> <td><iclass='glyphiconglyphicon-arrow-up'></i>2.94</td> </tr> <tr> <td>耗煤量</td> <td>21341</td> <td><iclass='glyphiconglyphicon-arrow-down'></i>0.31</td> <td><iclass='glyphiconglyphicon-arrow-up'></i>0.21</td> <td>334322</td> <td><iclass='glyphiconglyphicon-arrow-down'></i>1.13</td> <td><iclass='glyphiconglyphicon-arrow-up'></i>4.21</td> <td>3125113</td> <td><iclass='glyphiconglyphicon-arrow-down'></i>2.21</td> <td><iclass='glyphiconglyphicon-arrow-up'></i>2.94</td> </tr> <tr> <td>耗煤量</td> <td>21341</td> <td><iclass='glyphiconglyphicon-arrow-down'></i>0.31</td> <td><iclass='glyphiconglyphicon-arrow-up'></i>0.21</td> <td>334322</td> <td><iclass='glyphiconglyphicon-arrow-down'></i>1.13</td> <td><iclass='glyphiconglyphicon-arrow-up'></i>4.21</td> <td>3125113</td> <td><iclass='glyphiconglyphicon-arrow-down'></i>2.21</td> <td><iclass='glyphiconglyphicon-arrow-up'></i>2.94</td> </tr> <tr> <td>耗煤量</td> <td>21341</td> <td><iclass='glyphiconglyphicon-arrow-down'></i>0.31</td> <td><iclass='glyphiconglyphicon-arrow-up'></i>0.21</td> <td>334322</td> <td><iclass='glyphiconglyphicon-arrow-down'></i>1.13</td> <td><iclass='glyphiconglyphicon-arrow-up'></i>4.21</td> <td>3125113</td> <td><iclass='glyphiconglyphicon-arrow-down'></i>2.21</td> <td><iclass='glyphiconglyphicon-arrow-up'></i>2.94</td> </tr> <tr> <td>耗煤量</td> <td>21341</td> <td><iclass='glyphiconglyphicon-arrow-down'></i>0.31</td> <td><iclass='glyphiconglyphicon-arrow-up'></i>0.21</td> <td>334322</td> <td><iclass='glyphiconglyphicon-arrow-down'></i>1.13</td> <td><iclass='glyphiconglyphicon-arrow-up'></i>4.21</td> <td>3125113</td> <td><iclass='glyphiconglyphicon-arrow-down'></i>2.21</td> <td><iclass='glyphiconglyphicon-arrow-up'></i>2.94</td> </tr> <tr> <td>耗煤量</td> <td>21341</td> <td><iclass='glyphiconglyphicon-arrow-down'></i>0.31</td> <td><iclass='glyphiconglyphicon-arrow-up'></i>0.21</td> <td>334322</td> <td><iclass='glyphiconglyphicon-arrow-down'></i>1.13</td> <td><iclass='glyphiconglyphicon-arrow-up'></i>4.21</td> <td>3125113</td> <td><iclass='glyphiconglyphicon-arrow-down'></i>2.21</td> <td><iclass='glyphiconglyphicon-arrow-up'></i>2.94</td> </tr> <tr> <td>耗煤量</td> <td>21341</td> <td><iclass='glyphiconglyphicon-arrow-down'></i>0.31</td> <td><iclass='glyphiconglyphicon-arrow-up'></i>0.21</td> <td>334322</td> <td><iclass='glyphiconglyphicon-arrow-down'></i>1.13</td> <td><iclass='glyphiconglyphicon-arrow-up'></i>4.21</td> <td>3125113</td> <td><iclass='glyphiconglyphicon-arrow-down'></i>2.21</td> <td><iclass='glyphiconglyphicon-arrow-up'></i>2.94</td> </tr> </tbody> </table> </div>
例二:需求,第二个表格后面有个显示进度的自定义单元格,并且第一行要求是做一个合计的统计展示,这两个功能需要用js来设定自定义行列
html代码:
<div> <tabledata-toggle="table"data-height="268"class="tabletable-stripedtable-borderedtable-hover"id="tableL02"> <thead> <tr> <thdata-field="id"data-align="center"data-valign="middle">序号</th> <thdata-field="gys"data-align="center"data-valign="middle">供应商</th> <thdata-field="pz"data-align="center"data-valign="middle">品种</th> <thdata-field="rz"data-align="center"data-valign="middle">热值</th> <thdata-field="mj"data-align="center"data-valign="middle">煤价</th> <thdata-field="bmdj"data-align="center"data-valign="middle">标煤单价</th> <thdata-field="drlm"data-align="center"data-valign="middle">当日来煤</th> <thdata-field="ljlm"data-align="center"data-valign="middle">累计来煤</th> <thdata-field="yjhl"data-align="center"data-valign="middle">月计划量</th> <thdata-field="yjhjd"data-align="center"data-valign="middle"data-formatter="progress">月计划完成进度</th> </tr> </thead> <tbody> <tr> <td>2</td> <td>双欣矿业</td> <td>低硫煤</td> <td></td> <td></td> <td></td> <td></td> <td>6686.08</td> <td>30000</td> <td>22%</td> </tr> <tr> <td>3</td> <td>伊泰股份</td> <td>工程煤</td> <td></td> <td></td> <td></td> <td></td> <td>51888.72</td> <td>70000</td> <td>74%</td> </tr> <tr> <td>4</td> <td>嘉远公司</td> <td>中高硫煤</td> <td></td> <td></td> <td></td> <td></td> <td>20041.86</td> <td>90000</td> <td>100%</td> </tr> <tr> <td>5</td> <td>爱地能源</td> <td>低硫煤</td> <td></td> <td></td> <td></td> <td></td> <td>5191.08</td> <td>30000</td> <td>0%</td> </tr> <tr> <td>6</td> <td>恒泰煤炭</td> <td>中高硫煤</td> <td></td> <td></td> <td></td> <td></td> <td>18265.56</td> <td>0</td> <td>22%</td> </tr> <tr> <td>7</td> <td>双欣矿业</td> <td>低硫煤</td> <td></td> <td></td> <td></td> <td></td> <td>6686.08</td> <td>30000</td> <td>22%</td> </tr> <tr> <td>8</td> <td>双欣矿业</td> <td>低硫煤</td> <td></td> <td></td> <td></td> <td></td> <td>6686.08</td> <td>30000</td> <td>22%</td> </tr> <tr> <td>9</td> <td>双欣矿业</td> <td>低硫煤</td> <td></td> <td></td> <td></td> <td></td> <td>6686.08</td> <td>30000</td> <td>22%</td> </tr> </tbody> </table> </div>
js代码:
//声明用来统计合计(累计来煤,月计划)的变量 varyjhArr=[]; varljlmArr=[]; //显示进度条的自定义列 functionprogress(value,row){ varwidth=parseInt(row.yjhjd); varred='#e63737'; varblue='#b6ccf4'; yjhArr.push(row.yjhl); ljlmArr.push(row.ljlm); return"<divstyle='height:20px;border:1pxsolid#b6ccf4;'><spanstyle='display:block;float:left;width:"+width+"%;height:100%;background-color:"+<br>(width>=100?red:blue)+";'>"+value+"</span></div>" } //计算合计数值的方法 functionyjhTotal(){ varsubyjh=0; varsubljlm=0; varrow=[]; for(vari=0;i<yjhArr.length;i++){ if(yjhArr[i]==""){ yjhArr[i]=0; } subyjh+=parseFloat(yjhArr[i]); } for(varj=0;j<ljlmArr.length;j++){ if(ljlmArr[j]==""){ ljlmArr[j]=0; } subljlm+=parseFloat(ljlmArr[j]); } row.push({ id:1, gys:'合计', pz:'', rz:'', mj:'', bmdj:'', drlm:'', ljlm:subljlm.toFixed(2), yjhl:subyjh, yjhjd:'107%' }); returnrow }
分析:自定义行列需要添加data-formatter=‘方法名',其中progress()方法中的参数row,会在表格生成行的时候每生成一行就执行一次并将该行的对象传进来。
二:js方式
通过这种方法,可以很方便的为表格设置参数,处理数据方面十分便捷,尤其是设置请求方式和地址时,不过这个项目暂时只是静态页面,有关数据的以后接触在写上来
例一:同上例一
html:
<div> <tableclass="tabletable-stripedtable-borderedtable-hover"id="tableL01"></table> </div>
js:
//表格插件(表一)开始 $('#tableL01').bootstrapTable({ height:268, //模拟数据 columns:[[{ align:'center', valign:'middle', field:'lhc', title:'来耗存', rowspan:2 },{ align:'center', valign:'middle', field:'dr', title:'当日', colspan:3 },{ align:'center', valign:'middle', field:'bz', title:'本周', colspan:3 },{ align:'center', valign:'middle', field:'by', title:'本月', colspan:3}], [{ align:'center', valign:'middle', field:'drbq', title:'本期' },{ align:'center', valign:'middle', field:'drtb', title:'同比', formatter:trend },{ align:'center', valign:'middle', field:'drhb', title:'环比', formatter:trend},{ align:'center', valign:'middle', field:'bzbq', title:'本期' },{ align:'center', valign:'middle', field:'bztb', title:'同比', formatter:trend },{ align:'center', valign:'middle', field:'bzhb', title:'环比', formatter:trend},{ align:'center', valign:'middle', field:'bybq', title:'本期' },{ align:'center', valign:'middle', field:'bytb', title:'同比', formatter:trend},{ align:'center', valign:'middle', field:'byhb', title:'环比', formatter:trend }]], data:[{ id:1, lhc:'来存量', drbq:'21341', drtb:'0.21', drhb:'0.33', bzbq:'35624', bztb:'1.62', bzhb:'3.16', bybq:'42613', bytb:'2.78', byhb:'1.59' },{ id:2, lhc:'来存量', drbq:'21341', drtb:'0.21', drhb:'0.33', bzbq:'35624', bztb:'1.62', bzhb:'3.16', bybq:'42613', bytb:'2.78', byhb:'1.59' },{ id:3, lhc:'来存量', drbq:'21341', drtb:'0.21', drhb:'0.33', bzbq:'35624', bztb:'1.62', bzhb:'3.16', bybq:'42613', bytb:'2.78', byhb:'1.59' },{ id:4, lhc:'来存量', drbq:'21341', drtb:'0.21', drhb:'0.33', bzbq:'35624', bztb:'1.62', bzhb:'3.16', bybq:'42613', bytb:'2.78', byhb:'1.59' },{ id:5, lhc:'来存量', drbq:'21341', drtb:'0.21', drhb:'0.33', bzbq:'35624', bztb:'1.62', bzhb:'3.16', bybq:'42613', bytb:'2.78', byhb:'1.59' },{ id:6, lhc:'来存量', drbq:'21341', drtb:'0.21', drhb:'0.33', bzbq:'35624', bztb:'1.62', bzhb:'3.16', bybq:'42613', bytb:'2.78', byhb:'1.59' },{ id:7, lhc:'来存量', drbq:'21341', drtb:'0.21', drhb:'0.33', bzbq:'35624', bztb:'1.62', bzhb:'3.16', bybq:'42613', bytb:'2.78', byhb:'1.59' },{ id:8, lhc:'来存量', drbq:'21341', drtb:'0.21', drhb:'0.33', bzbq:'35624', bztb:'1.62', bzhb:'3.16', bybq:'42613', bytb:'2.78', byhb:'1.59' },{ id:9, lhc:'来存量', drbq:'21341', drtb:'0.21', drhb:'0.33', bzbq:'35624', bztb:'1.62', bzhb:'3.16', bybq:'42613', bytb:'2.78', byhb:'1.59' },{ id:10, lhc:'来存量', drbq:'21341', drtb:'0.21', drhb:'0.33', bzbq:'35624', bztb:'1.62', bzhb:'3.16', bybq:'42613', bytb:'2.78', byhb:'1.59' },{ id:11, lhc:'来存量', drbq:'21341', drtb:'0.21', drhb:'0.33', bzbq:'35624', bztb:'1.62', bzhb:'3.16', bybq:'42613', bytb:'2.78', byhb:'1.59' },{ id:12, lhc:'来存量', drbq:'21341', drtb:'0.21', drhb:'0.33', bzbq:'35624', bztb:'1.62', bzhb:'3.16', bybq:'42613', bytb:'2.78', byhb:'1.59' }]}); //模拟数据结束 //上下浮动箭头样式添加 functiontrend(value,row){ vartrendIcon=row.id%2===0?'glyphiconglyphicon-arrow-down':'glyphiconglyphicon-arrow-up'; return"<iclass='"+trendIcon+"'></i>"+value } //表格插件一结束
分析:$('#tableL01').bootstrapTable({})是插件开始的标志,在其中添加表格的参数,然后在data:是表格的数据,而columns中则是设置列参数以及表格数据的地方,其中这个项目有代表性的是表头分为两部分,因此需要在columns中加两个数组【{}】,【{}】。之前都写在一个数组里,而源代码遍历的是columns的length
例二:
html相同都是只需要一个带id的table标签即可
js:
//表格插件(表二)开始 //声明用来统计合计(累计来煤,月计划)的变量 varyjhArr=[]; varljlmArr=[]; $('#tableL02').bootstrapTable({ height:268, //模拟数据 columns:[{ align:'center', valign:'middle', field:'id', title:'序号' },{ align:'center', valign:'middle', field:'gys', title:'供应商' },{ align:'center', valign:'middle', field:'pz', title:'品种' },{ align:'center', valign:'middle', field:'rz', title:'热值' },{ align:'center', valign:'middle', field:'mj', title:'煤价' },{ align:'center', valign:'middle', field:'bmdj', title:'标煤单价' },{ align:'center', valign:'middle', field:'drlm', title:'当日来煤' },{ align:'center', valign:'middle', field:'ljlm', title:'累计来煤' },{ align:'center', valign:'middle', field:'yjhl', title:'月计划量' },{ align:'center', valign:'middle', field:'yjhjd', title:'月计划完成进度', formatter:progress }], data:[{ id:2, gys:'双欣矿业', pz:'低硫煤', rz:'', mj:'', bmdj:'', drlm:'', ljlm:'6686.08', yjhl:'30000', yjhjd:'22%' },{ id:3, gys:'伊泰股份', pz:'工程煤', rz:'', mj:'', bmdj:'', drlm:'', ljlm:'51888.72', yjhl:'70000', yjhjd:'74%' },{ id:4, gys:'嘉远公司', pz:'中高硫煤', rz:'', mj:'', bmdj:'', drlm:'', ljlm:'20041.86', yjhl:'90000', yjhjd:'100%' },{ id:5, gys:'爱地能源', pz:'低硫煤', rz:'', mj:'', bmdj:'', drlm:'', ljlm:'5191.08', yjhl:'', yjhjd:'0%' },{ id:6, gys:'恒泰煤炭', pz:'中高硫煤', rz:'', mj:'', bmdj:'', drlm:'', ljlm:'18265.56', yjhl:'', yjhjd:'0%' },{ id:6, gys:'恒泰煤炭', pz:'中高硫煤', rz:'', mj:'', bmdj:'', drlm:'', ljlm:'18265.56', yjhl:'', yjhjd:'0%' },{ id:6, gys:'恒泰煤炭', pz:'中高硫煤', rz:'', mj:'', bmdj:'', drlm:'', ljlm:'18265.56', yjhl:'', yjhjd:'0%' } ]}); //模拟数据结束 //显示进度条的自定义列 functionprogress(value,row){ varwidth=parseInt(row.yjhjd); varred='#e63737'; varblue='#b6ccf4'; yjhArr.push(row.yjhl); ljlmArr.push(row.ljlm); return"<divstyle='height:20px;border:1pxsolid#b6ccf4;'><spanstyle='display:block;float:left;width:"+width+"%;height:100%;background-color:"+(width>=100?red:blue)+";'>"+value+"</span></div>" } //计算合计数值的方法 functionyjhTotal(){ varsubyjh=0; varsubljlm=0; varrow=[]; for(vari=0;i<yjhArr.length;i++){ if(yjhArr[i]==""){ yjhArr[i]=0; } subyjh+=parseFloat(yjhArr[i]); } for(varj=0;j<ljlmArr.length;j++){ if(ljlmArr[j]==""){ ljlmArr[j]=0; } subljlm+=parseFloat(ljlmArr[j]); } row.push({ id:1, gys:'合计', pz:'', rz:'', mj:'', bmdj:'', drlm:'', ljlm:subljlm, yjhl:subyjh, yjhjd:'107%' }); returnrow }
这个其实和第一种方式差别不大,只不过把自定义列放在数据中设置罢了。比较好理解。而关于其他参数可以参考官网,数据是动态的如何添加网上也有不少例子,只要都放在.bootstrapTable({})中就可以了
以上所述是小编给大家介绍的BootStraptable表格插件自适应固定表头(超好用),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!