Bootstrap-table表格插件的使用方法
前言
上次写了一个可拖动列表的插件,但除了这个特点没什么优点了,接下写的是我们常用的Bootstrap-table表格插件
正文
官网:https://bootstrap-table.com/
有两个翻译API的网址:
https://blog.csdn.net/S_clifftop/article/details/77937356?locationNum=3&fps=1
https://blog.csdn.net/mrczr/article/details/64441265
在使用时需要引入如下几个文件:
bootstrap.min.css
bootstrap-table.css
jquery.js
bootstrap.js
bootstrap-table.js
bootstrap-table-zh-CN.js(中文插件)
客户端分页例如下:
- // 首先销毁表格
- $('#fwfx_tb').bootstrapTable('destroy');
- // 初始化表格,动态从服务器加载数据
- $('#fwfx_tb').bootstrapTable({
- pagination: true, //启动分页
- striped: true, //设置为 true 会有隔行变色效果
- cache: false, //是否使用缓存,默认为true,所以一般情况下需要设置一下这个属性(*)
- pageSize: 20,//初始页记录数
- sortable: true, //排序
- pageList: [10,20], //记录数可选列表
- smartDisplay: false, //程序自动判断显示分页信息
- columns: [{
- title: '序号',
- align: 'center',
- halign: 'center',
- formatter: function (value, row, index) {
- return index + 1;
- }
- }, {
- field: 'name',
- title: '服务名',
- align: 'center',
- sortable:true //排序
- }, {
- field: 'sum',
- title: '金额',
- align: 'center'
- }, {
- field: 'PV',
- title: '访问量',
- align: 'center'
- }
- data: tableData
- });
服务器端分页例如下:
- $('#user_content_tab').bootstrapTable('destroy');
- // 初始化表格,动态从服务器加载数据
- $('#user_content_tab').bootstrapTable({
- url: "admin/query",
- method: 'post',
- sidePagination: 'server', //表示服务端请求
- queryParams:logUl,//请求服务器时所传的参数
- ajaxOptions:{ //提交ajax请求时的附加参数
- headers: {
- 'token': '94564375541867846'//这里传的token是根据你的前后台交互情况
- }
- },
- toolbar : '#toolbar', // 工具按钮用哪个容器
- pagination: true, //默认为false,表格的底部工具栏不会显示分页条
- queryParamsType:'',//查询参数组织方式,必须设置为空,否则没有页码params.pageNumber
- striped: true, //设置为 true 会有隔行变色效果
- pageSize: 20, //每页显示行数
- pageList:[10,20,50],
- maintainSelected: true, //在点击分页按钮或搜索按钮时,将记住checkbox的选择项
- smartDisplay: false, //程序自动判断显示分页信息
- clickToSelect: true, //是否启用点击选中行
- toolbarAlign: 'right', //指定 toolbar 水平方向的位置
- uniqueId: 'userId', //为每一行指定唯一标识符
- idField: 'userId', //指定主键列
- paginationDetailHAlign:'right',//指定分页详细信息在水平方向的位置
- columns: [{
- title: '序号',
- align: 'center',
- halign: 'center',
- formatter: function (value, row, index) {
- var options = $table.bootstrapTable('getOptions');
- return options.pageSize * (options.pageNumber - 1) + index + 1;
- }
- },{
- field: 'userId',
- title: '用户ID',
- align: 'center',
- },
- {
- field: 'username',
- title: '用户名称',
- align: 'center'
- },
- {
- field: 'roleName',
- title: '角色',
- align: 'center'
- },
- {
- field: 'createTime',
- title: '创建时间',
- align: 'center',
- formatter : function(value, row, index) {
- return fmtDate(value)
- }
- },
- {
- field: 'status',
- title: '账户状态',
- align: 'center'
- },
- {
- field: 'userId',
- title: '操作',
- align: 'center',
- width: 350,
- formatter: operateFormatter//在这里我的目的是添加按钮
- }],
- formatNoMatches: function(){
- return "没有相关的匹配结果";
- },
- formatLoadingMessage: function(){
- return "请稍等,正在加载中。。。";
- },
- responseHandler:function(res){ //加载服务器数据之前的处理程序,可以用来格式化数据,服务器返回的数据要在这里使用
- if(res.resCode == "403"){
- localStorage.clear();
- parent.location.href = location403;
- } else if(res.resStatus == 0) {
- for(var i = 0; i < res.resData.rows.length; i++) {
- if(res.resData.rows[i].status) {
- res.resData.rows[i].status = '启用';
- } else {
- res.resData.rows[i].status = '禁用';
- }
- }
- var cusData = {//这里的处理数据是根据你前后台交互的数据情况来的
- "rows": res.resData.rows,
- "total": res.resData.total
- }
- return cusData;
- } else {
- toastr.info(res.resMsg);
- return;
- }
- }
- });
- function logUl(params){
- pageNumbers = params.pageNumber;
- pageSizes = params.pageSize;
- return {
- "pageNo": params.pageNumber,
- "pageSize": params.pageSize,
- "username": queryVal
- }
- }
- function operateFormatter(value, row, index){ //添加按钮
- var rows = JSON.stringify(row);
- // 根据传过来的参数添加不同的class
- var classED = 'enabledE';
- var classEDVal;
- if(row.status == '启用') {
- classED = 'enabledD';
- classEDVal = '禁用';
- } else {
- classED = 'enabledE';
- classEDVal = '启用';
- }
- // onclick=modif(' + value + "," + rows + "," + index + ')
- return [
- '<div class="modify operationBtn" title="重置密码" table-data=' + rows + '><i class="glyphicon glyphicon-pencil"></i>重置密码</div>',
- '<div class="enabled operationBtn '+ classED + '" title="禁用/启用" table-data=' + rows + '><i class="glyphicon glyphicon-user"></i>' + classEDVal + '</div>',
- '<div class="del operationBtn" title="删除" table-data=' + rows + '><i class="glyphicon glyphicon-trash"></i>删除</div>'
- ].join("")
- }
拖动列来控制列宽的插件:
引入bootstrap-table-resizable.js和colResizable-1.6.min.js
- $("#exampleTable").colResizable({
- liveDrag: true,//实时显示滑动位置
- gripInnerHtml: "<div class='grip'></div>",
- //draggingClass: "dragging",
- postbackSafe: true,//刷新后保留之前的拖拽宽度
- headerOnly:true,
- resizeMode:"overflow",
- //onResize: onSampleResized
- });
一些功能实现的样例:
1.选中
- $('#generateClueObjectTable').bootstrapTable('checkBy', { field:"这里是选中行列字段", values:[这里选中行是列字段内的值,可多个]});
只可选中一行,使用check.bs.table事件(当用户选中一行时触发的事件)
- $('#generateClueObjectTable').on('check.bs.table', function (row,element,input) {
- if (_this.addResearchReportTransObjectJudge) {
- let selections = $("#generateClueObjectTable").bootstrapTable('getSelections');
- if (selections.length > 1) {
- $('#generateClueObjectTable').bootstrapTable('uncheck',input[0].dataset.index);
- _this.$message.error('只能选择一个对象');
- }
- }
- });
2.禁止全选操作,例:
- check-all.bs.table 全选事件
- $('#generateClueObjectTable').on('check-all.bs.table', function (row,element,input) {
- if(_this.addResearchReportTransObjectJudge) {
- $("#generateClueObjectTable").bootstrapTable('uncheckAll');//阻止全选
- }
- });
3.为复选框(checkbox)禁用或选中,例:
在复选框(checkbox)列中使用formatter
- formatter: function (value, row, index) {
- return {
- disabled : true //设置是否可用
- checked : true//设置选中
- }
- }
4.在表格中嵌套表格,例:
- columns:[{
- title: '部门',
- align: 'left',
- sortable: false,
- formatter: function (value, row, index) {
- return row.deptName;
- }
- },{
- field: '',
- title: "<table id=\"statisticTable\" class=\"tables\" style='border:1px solid #bdd5dd;'>" +
- "<thead><tr>" +
- "<th style=\"width:9%;padding-left: 10px;\" class=\"statisticTableTD\">状态</th>" +
- "<th style=\"width:9%;padding-left: 10px;\" class=\"statisticTableTD\">数量</th>" +
- "<th style=\"width:9%;padding-left: 10px;\" class=\"statisticTableTD\">自主调研</th>" +
- "<th style=\"width:9%;padding-left: 10px;\" class=\"statisticTableTD\">上级交办</th>" +
- "</tr></thead>" +
- "</table>",
- align: 'left',
- sortable: false,
- formatter: function (value, row, index) {
- var table = "<table class='table-keyValue' style='border:1px solid #d0e3e9;'>";
- $.each(row.stats, function (i, item) {
- table += "<tr><td style=\"width:9%;\" class='statisticTableTD '>" + (item.statusCn == null ? 0 : item.statusCn) + "</td>"
- + "<td style=\"width:9%;\" class='statisticTableTD'>" + (item.number == null ? 0 : item.number) + "</td>"
- + "<td style=\"width:9%;\" class='statisticTableTD'>" + (item.source1 == null ? 0 : item.source1) + "</td>"
- + "<td style=\"width:9%;\" class='statisticTableTD'>" + (item.source0 == null ? 0 : item.source0) + "</td>" + "</tr>";
- });
- table += "</table>";
- return table;
- }
- }]
5.实现多层表头
colspan 每格所占的列数
rowspan 每格所占的行数
- columns: [
- [{
- title: '这是标题',
- field: '',
- align: 'center',
- valign: 'middle',
- colspan: 10
- }],
- [{
- title: '这是标题1',
- field: '',
- align: 'center',
- valign: 'middle',
- colspan: 1,
- rowspan: 2
- }, {
- title: '这是标题2',
- field: '',
- align: 'center',
- valign: 'middle',
- colspan: 4,
- rowsapn: 1
- }, {
- title: '这是标题3',
- field: '',
- align: 'center',
- valign: 'middle',
- colspan: 5,
- rowsapn: 1
- }],
- [{
- field: 'title1', //列ID同时也是指定要显示的数据的ID
- title: '标题',
- width: 100,
- align: 'center',
- valign: 'middle',
- sortable: true
- },
- ......
- ]
- ]
下面是遇到的问题:
问题1.在设置为服务器端分页时,获取页码的params.pageNumber会返回undefined
这是因为queryParamsType的默认参数是limit,在官方说明中这样解释:
"如果 queryParamsType = 'limit' ,返回参数必须包含limit, offset, search, sort, order 否则, 需要包含: pageSize, pageNumber, searchText, sortName, sortOrder. 返回false将会终止请求"
有两种解决方法:
1.为queryParamsType传空参数,即queryParamsType : "",这时没有params.limit,但可用params.pageSize来代替
2.修改源码
首先在bootstrap-table.min.js中搜索 "limit"===this.options.queryParamsType&& (完全复制过去搜索,当然因为版本的原因,一些版本代码细微处可能不太一样,但是肯定跟limit有关)找到下面的代码片段:
- "limit"===this.options.queryParamsType&&(i={search:i.searchText,sort:i.sortName,order:i.sortOrder},this.options.pagination&&(i.offset=this.options.pageSize===this.options.formatAllRows()?0:this.options.pageSize*(this.options.pageNumber-1),i.limit=this.options.pageSize===this.options.formatAllRows()?this.options.totalRows:this.options.pageSize))
可以看到在this.options.pagination&&后面的括号中有i.offset=...和i.limit=...的代码,
在i.limit=this.options.pageSize===this.options.formatAllRows()?this.options.totalRows:this.options.pageSize后面加上,i.pageNumber=this.options.pageNumber(记得一定要英文逗号分隔)
最终修改后结果如下:
- "limit"===this.options.queryParamsType&&(i={search:i.searchText,sort:i.sortName,order:i.sortOrder},this.options.pagination&&(i.offset=this.options.pageSize===this.options.formatAllRows()?0:this.options.pageSize*(this.options.pageNumber-1),i.limit=this.options.pageSize===this.options.formatAllRows()?this.options.totalRows:this.options.pageSize, i.pageNumber=this.options.pageNumber))
这样就可以通过params.pageNumber取到页码
问题2:在向表格内写入自定义元素时在列中使用formatter方法,但在元素中不可直接添加事件,否则无效,只可使用js获取元素后添加事件.
问题3:在向表格内写入自定义元素时在列中使用formatter方法,但在元素中添加行数据row时,必须先将json数据转为字符串才可使用,如:
- var rows = JSON.stringify(row);
且在添加元素内时必须使用单引号('')包含,如:
- "<span class='classDataTable transRelateName' table-data='" + JSON.stringify(row) + "'>" + row.relateName + "</span>"
- 问题4:当表格中有点击事件的自定义元素时,换页会导致无法点击?
- 方法一(推荐,如果在vue等框架内要保证类名和事件函数内调用的函数是唯一的):在写点击事件时需要按如下方法书写:
- $(document).on('click', '.researchName', function () {}
- 方法二:把事件单独写一个函数,在表格中添加换页事件onPageChange,事件调用函数就行
问题5:设置列宽问题
首先要给table加个下面的样式:
table-layout: fixed;
然后给列设置属性:
width: 300
Bootstrap-table表格插件的使用方法的更多相关文章
- [转]手把手教你--Bootstrap Table表格插件及数据导出(可导出Excel2003及Exce2007)
原文地址:https://blog.csdn.net/javayoucome/article/details/80081771 1.介绍 Bootstrap Table介绍见官网:http://boo ...
- Bootstrap Table表格一直加载(load)不了数据-解决办法
bootstrap-table是一个基于Bootstrap风格的强大的表格插件神器,官网:http://bootstrap-table.wenzhixin.net.cn/zh-cn/ 这里列出遇到的一 ...
- JS组件系列——Bootstrap Table 表格行拖拽(二:多行拖拽)
前言:前天刚写了篇JS组件系列——Bootstrap Table 表格行拖拽,今天接到新的需要,需要在之前表格行拖拽的基础上能够同时拖拽选中的多行.博主用了半天时间研究了下,效果是出来了,但是感觉不尽 ...
- bootstrap table表格属性、列属性、事件、方法
留存一份,原文地址http://bootstrap-table.wenzhixin.net.cn/zh-cn/documentation/ 表格参数 表格的参数定义在 jQuery.fn.bootst ...
- bootstrap 分页表格插件
找了两个table的插件,一个是bootstrap table ,另一个是bootstrap-paginator 这里只介绍 bootstrap table 插件 使用及简单案例 文档介绍:http: ...
- html table表格导出excel的方法 html5 table导出Excel HTML用JS导出Excel的五种方法 html中table导出Excel 前端开发 将table内容导出到excel HTML table导出到Excel中的解决办法 js实现table导出Excel,保留table样式
先上代码 <script type="text/javascript" language="javascript"> var idTmr; ...
- JS组件系列——Bootstrap Table 表格行拖拽
前言:之前一直在研究DDD相关知识,好久没更新JS系列文章了.这两天做了一个简单的业务需求,觉得效果还可以,今天在这里分享给大家,欢迎拍砖~~ 一.业务需求及实现效果 项目涉及到订单模块,那天突然接到 ...
- Bootstrap Table列宽拖动的方法
在之前做过的一个web项目中,前端表格是基于jQuery和Bootstrap Table实现的,要求能利用拖动改变列宽,现将实现的过程记录如下: 1. Bootstrap Table可拖动,需要用到它 ...
- 基于Bootstrap的表格插件bootstrap-table
写在前面: 表格在项目中是使用比较多的,bootstrap-table插件也是非常好用,而且表格页面也比较好看.这里也简单的记录下. 下面直接看demo吧,代码中都注释了,有些用法,这里没有用到,需要 ...
随机推荐
- MySQL中日期和时间类型
1 日期类型 MySql中关于日期的类型有Date/Datetime/Timestamp三种类型. 日期赋值时,允许"不严格"语法:任何标点符都可以用做日期部分或时间部分之间的间割 ...
- OSI网络模型和网络连接设备
OSI网络模型和网络连接设备 OSI模型 7层之间传输的协议传输单元(PDU)的专业叫法. 第7-5层(应用层)传输的pdu叫:data 第4层(传输层)传输的pdu叫:segment(数据段) 第3 ...
- fetchone函数和fetchall函数返回值的区别
fetchone函数和fetchall函数返回值的区别 1.fetchone() 返回单个的元组,也就是一条记录(row),如果没有结果,则python返回 None 有结果时,如图: 没结果时,如 ...
- KETTLE入门教程-单表读取
kettle初探 Kettle简介:Kettle是一款国外开源的ETL工具,纯java编写,可以在Window.Linux.Unix上运行,数据抽取高效稳定.Kettle 中文名称叫水壶,该项目的主程 ...
- linux虚拟机安装python 及 配置环境变量
一.安装anaconda 下载anaconda安装包 (wget -P filepath 下载链接) linux下安装anaconda教程,并添加清华镜像 sh Anaconda3-5.3.1-Lin ...
- [C4W3] Convolutional Neural Networks - Object detection
第三周 目标检测(Object detection) 目标定位(Object localization) 大家好,欢迎回来,这一周我们学习的主要内容是对象检测,它是计算机视觉领域中一个新兴的应用方向, ...
- 第九周周四计划&&周三总结
今天由于自己的原因进度不是很大,今天整理了一下全网关联的思路流程(个人可能就是那种没自信,在思路不知道对不对的情况下不敢下手那种渣渣),和之前的一个学长讨论了一下大概思路流程,如下: (1)使用LDA ...
- Linux 目录详细介绍
[常见目录说明] 目录 /bin 存放二进制可执行文件(ls,cat,mkdir等),常用命令一般都在这里. /etc 存放系统管理和配置文件 /home 存放所有用户文件的根目录,是用户主目录的基点 ...
- 剑指offer:序列化二叉(前序遍历+层次)
1. 题目描述 /** 请实现两个函数,分别用来序列化和反序列化二叉树 二叉树的序列化是指:把一棵二叉树按照某种遍历方式的结果以某种格式保存为字符串,从而使得内存中建立起来的二叉树可以持久保存. 序列 ...
- [NewLife.XCode]百亿级性能
NewLife.XCode是一个有10多年历史的开源数据中间件,支持nfx/netcore,由新生命团队(2002~2019)开发完成并维护至今,以下简称XCode. 整个系列教程会大量结合示例代码和 ...