Bootstrap表格插件--bootstrap-table

3,350 阅读8分钟
原文链接: blog.csdn.net

一、简介


bootstrap-table是基于 Bootstrap 的 jQuery 表格插件,通过简单的设置,就可以拥有强大的单选、多选、排序、分页,以及编辑、导出、过滤(扩展)等等的功能。


官网地址: http://bootstrap-table.wenzhixin.net.cn/zh-cn/
Github地址: https://github.com/wenzhixin/bootstrap-table

中文文档:bootstrap-table.wenzhixin.net.cn/zh-cn/docum…


主要功能

支持 Bootstrap 3 和 Bootstrap 2
自适应界面
固定表头
非常丰富的配置参数
直接通过标签使用
显示/隐藏列
显示/隐藏表头
通过 AJAX 获取 JSON 格式的数据
支持排序
格式化表格
支持单选或者多选
强大的分页功能
支持卡片视图
支持多语言
支持插件

优点

学习成本较低,配置简单,文档齐全
跟Bootstrap无缝衔接,整体风格一致,也便于二次开发
开发者活跃,Github定期维护


二、使用


2.1、下载源码


首先去github下载最新的版本,下载下来之后解压如下:




2.2、在页面中引入插件


复制dist目录下的文件到项目中去:






还得引入Bootstrap的样式与JS,和Jquery文件,完整的引入如下:


[html] view plain copy print?
  1. <!-- 引入bootstrap样式 -->  
  2. <link href="css/bootstrap.css"  rel="stylesheet">  
  3. <!-- 引入bootstrap-table样式 -->  
  4. <link href="css/bootstrap-table.css"  rel="stylesheet">  
  5.   
  6. <!-- jquery -->  
  7. <script src="js/jquery.min.js"> </script>  
  8. <script src="js/bootstrap.min.js"> </script>  
  9.   
  10. <!-- bootstrap-table.min.js -->  
  11. <script src="js/bootstrap-table.js"> </script>  
  12. <!-- 引入中文语言包 -->  
  13. <script src="js/bootstrap-table-zh-CN.js"> </script>  
<!-- 引入bootstrap样式 -->
<link href="css/bootstrap.css" rel="stylesheet">
<!-- 引入bootstrap-table样式 -->
<link href="css/bootstrap-table.css" rel="stylesheet">

<!-- jquery -->
<script src="js/jquery.min.js"></script>
<script src="js/bootstrap.min.js"></script>

<!-- bootstrap-table.min.js -->
<script src="js/bootstrap-table.js"></script>
<!-- 引入中文语言包 -->
<script src="js/bootstrap-table-zh-CN.js"></script>

2.3、Table数据填充


bootStrap table获取数据有两种方式,一是通过table 的data-url属性指定数据源


注意:使用data-toggle="table"的话,js操作就会失效,反之生效

[html] view plain copy print?
  1. <table data-toggle="table">  
  2.  <thead>  
  3.  ...  
  4.  </thead>  
  5. </table>  
  6.   
  7. $('#table').bootstrapTable({  
  8.   url: 'data.json'  
  9.  });  
<table data-toggle="table">
 <thead>
 ...
 </thead>
</table>

$('#table').bootstrapTable({
  url: 'data.json'
 });

二是通过JavaScript初始化表格时指定url来获取数据

[html] view plain copy print?
  1. <div class="panel panel-default">  
  2.     <div class="panel-body table-responsive" >  
  3.                
  4.             <div class= "query-div" id="toolbar">  
  5.                         <form  class="form-inline" role="form"  id="query_form">  
  6.                             <div  class="form-group query-form-group">  
  7.                                 < label for="status">xxxx</label >  
  8.                                 < select class="form-control" id="with_appr_status"  
  9.                                     < option value="">xxxx</option >  
  10.                                     < option value="S1">xxxx</option >  
  11.                                     < option value="S2">xxxx</option >  
  12.                                 </ select>  
  13.                             </div >  
  14.                             <div  class="form-group query-form-group">  
  15.                                 < button type="button" class="btn btn-default"  id="with_query">xxxx</button>  
  16.                             </div >  
  17.                         </form >  
  18.             </div>  
  19.   
  20.                     <table  id="query_results" class="table table-hover" >  
  21.                         <thead >  
  22.                         <tr >  
  23.                             <th  data-field="code">xxxx</th>  
  24.                             <th  data-field="time">xxxx</th>  
  25.                             <th  data-field="status" data-formatter="formatStatus" >xxxx</th>  
  26.                             <th  data-field="remark">xxxx</th>  
  27.                         </tr >  
  28.                         </thead >  
  29.                     </table>  
  30.     </div>  
  31. </div>  
<div class="panel panel-default">
	<div class="panel-body table-responsive">
	         
			<div class="query-div" id="toolbar">
						<form class="form-inline" role="form" id="query_form">
							<div class="form-group query-form-group">
								<label for="status">xxxx</label>
								<select class="form-control" id="with_appr_status"
									<option value="">xxxx</option>
									<option value="S1">xxxx</option>
									<option value="S2">xxxx</option>
								</select>
							</div>
							<div class="form-group query-form-group">
								<button type="button" class="btn btn-default" id="with_query">xxxx</button>
							</div>
						</form>
			</div>

					<table id="query_results" class="table table-hover">
						<thead>
						<tr>
							<th data-field="code">xxxx</th>
							<th data-field="time">xxxx</th>
							<th data-field="status" data-formatter="formatStatus">xxxx</th>
							<th data-field="remark">xxxx</th>
						</tr>
						</thead>
					</table>
	</div>
</div>

JS代码:
[html] view plain copy print?
  1. //注意  
  2. //1. contentType: "application/x-www-form-urlencoded"  想要后台使用struts来接受数据,或者使用对象.属性的方法获取,需要配置这个form,默认是“json”  
  3. //2. pageNo 第几页,需要使用“Math.ceil(params.offset/params.limit) + 1”来计算,params.pageNumber一直获取的是第一页  
  4.   
  5. loadData();//默认查询  
  6.   
  7. function loadData(){  
  8. //表格id  
  9. $('#query_results').bootstrapTable({  
  10.         url: '/test',  //请求后台的URL(*)  
  11.         method: 'post',   //请求方式(*)  
  12.         contentType: "application/x-www-form-urlencoded",//需要设置为这个参数,后台才能通过对象获取值,这里要注意  
  13.         dataType: "json",//期待返回数据类型  
  14.         toolbar: '#toolbar',  //工具按钮用哪个容器  
  15.         toolbarAlign: "left",//工具栏对齐方式  
  16.         striped: true,   //是否显示行间隔色  
  17.         cache: false,   //是否使用缓存,默认为true,所以一般情况下需要设置一下这个属性(*)  
  18.         pagination: true,   //是否显示分页(*)  
  19.         //sortable: false,   //是否启用排序  
  20.         sidePagination: "server",  //分页方式:client客户端分页,server服务端分页(*)  
  21.         pageNumber: 1,   //初始化加载第一页,默认第一页  
  22.         pageSize: 5,   //每页的记录行数(*)  
  23.         pageList: [5, 10, 25, 50, 100], //可供选择的每页的行数(*)  
  24.         sortOrder: "asc",   //排序方式  
  25.         search: false,//搜索功能  
  26.         buttonsAlign: "left",//按钮对齐方式  
  27.         //showColumns: true,//列选择按钮  
  28.         strictSearch: true,  
  29.         clickToSelect: true,  //是否启用点击选中行  
  30.         //height: 460,   //行高,如果没有设置height属性,表格自动根据记录条数觉得表格高度  
  31.         uniqueId: "id",   //每一行的唯一标识,一般为主键列  
  32.         cardView: false,   //是否显示详细视图  
  33.         detailView: false,   //是否显示父子表  
  34.         queryParamsType: 'limit',  
  35.         queryParams: queryParams  
  36.     });  
  37.   
  38.     //默认加载时携带参数  
  39.     function queryParams(params) {  
  40.         var params = { //这里的键的名字和控制器的变量名必须一直,这边改动,控制器也需要改成一样的  
  41.             pageNo : Math.ceil(params.offset/params.limit) + 1, //页码  
  42.             pageSize : params.limit, //页面大小  
  43.             "status" : $("#status").val()  
  44.         };  
  45.         return params;  
  46.     }  
  47.   
  48. }  
  49.   
  50. //点击“查询”按钮  
  51. $("#query").bind("click",function(){  
  52.   //两种方式:  
  53.   //1.直接刷新 $('#query_results').bootstrapTable("refresh", {});    
  54.   //2. 先销毁数据,再次查询,如下  
  55.     $("#query_results").bootstrapTable('destroy');  
  56.     loadPageData();  
  57. });  
  58.    
  59. //表格列的格式化翻译,对应data-formatter="formatStatus"  
  60. function formatStatus(value, row, index){  
  61.   if(value == 'S1'){  
  62.     return "xxx";  
  63.   }else{  
  64.     return "xxx"  
  65.   }  
  66. }  
//注意
//1. contentType: "application/x-www-form-urlencoded"  想要后台使用struts来接受数据,或者使用对象.属性的方法获取,需要配置这个form,默认是“json”
//2. pageNo 第几页,需要使用“Math.ceil(params.offset/params.limit) + 1”来计算,params.pageNumber一直获取的是第一页

loadData();//默认查询

function loadData(){
//表格id
$('#query_results').bootstrapTable({
        url: '/test',  //请求后台的URL(*)
        method: 'post',   //请求方式(*)
        contentType: "application/x-www-form-urlencoded",//需要设置为这个参数,后台才能通过对象获取值,这里要注意
        dataType: "json",//期待返回数据类型
        toolbar: '#toolbar',  //工具按钮用哪个容器
        toolbarAlign: "left",//工具栏对齐方式
        striped: true,   //是否显示行间隔色
        cache: false,   //是否使用缓存,默认为true,所以一般情况下需要设置一下这个属性(*)
        pagination: true,   //是否显示分页(*)
        //sortable: false,   //是否启用排序
        sidePagination: "server",  //分页方式:client客户端分页,server服务端分页(*)
        pageNumber: 1,   //初始化加载第一页,默认第一页
        pageSize: 5,   //每页的记录行数(*)
        pageList: [5, 10, 25, 50, 100], //可供选择的每页的行数(*)
        sortOrder: "asc",   //排序方式
        search: false,//搜索功能
        buttonsAlign: "left",//按钮对齐方式
        //showColumns: true,//列选择按钮
        strictSearch: true,
        clickToSelect: true,  //是否启用点击选中行
        //height: 460,   //行高,如果没有设置height属性,表格自动根据记录条数觉得表格高度
        uniqueId: "id",   //每一行的唯一标识,一般为主键列
        cardView: false,   //是否显示详细视图
        detailView: false,   //是否显示父子表
        queryParamsType: 'limit',
        queryParams: queryParams
    });

    //默认加载时携带参数
    function queryParams(params) {
        var params = { //这里的键的名字和控制器的变量名必须一直,这边改动,控制器也需要改成一样的
            pageNo : Math.ceil(params.offset/params.limit) + 1, //页码
            pageSize : params.limit, //页面大小
            "status" : $("#status").val()
        };
        return params;
    }

}

//点击“查询”按钮
$("#query").bind("click",function(){
  //两种方式:
  //1.直接刷新 $('#query_results').bootstrapTable("refresh", {});  
  //2. 先销毁数据,再次查询,如下
    $("#query_results").bootstrapTable('destroy');
    loadPageData();
});
 
//表格列的格式化翻译,对应data-formatter="formatStatus"
function formatStatus(value, row, index){
  if(value == 'S1'){
    return "xxx";
  }else{
    return "xxx"
  }
}