文档章节

bootstrap table 实例

big_cat
 big_cat
发布于 2016/03/16 16:30
字数 1166
阅读 28272
收藏 28

bootstrap table 封装了一套完善的数据表格组件,把下面的代码复制一下估计你需要的基本功能都有了,没有的再看看手册对比着我给的实例也能很快的熟悉了

客户端

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Bootstrap-Table</title>
    <link rel="stylesheet" href="http://apps.bdimg.com/libs/bootstrap/3.3.4/css/bootstrap.min.css"/>
    <link rel="stylesheet" href="assets/bootstrap-table.css"/>
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
</head>
<body>
    <div>
        <div>
            <div class="col-*-12">

                <div id="toolbar">
                    <div class="btn btn-primary" data-toggle="modal" data-target="#addModal">添加记录</div>
                </div>
                
                <table id="mytab" class="table table-hover"></table>

                <div class="modal fade" id="addModal" tabindex="-1" role="dialog" aria-hidden="true">
                   <div class="modal-dialog">
                        <div class="modal-content">
                            <div class="modal-header">
                                <button type="button" class="close" data-dismiss="modal" aria-hidden="true">
                                    &times;
                                </button>
                                <h4 class="modal-title" id="myModalLabel">添加记录</h4>
                            </div>
                            <div class="modal-body">
                                <form role="form" action="javascript:void(0)">
                                    <div class="form-group">
                                        <input type="text" class="form-control" id="name" placeholder="请输入名称">
                                    </div>
                                    <div class="form-group">
                                        <input type="text" class="form-control" id="age" placeholder="请输入年龄">
                                    </div>
                                </form>
                            </div>
                            <div class="modal-footer">
                                <button type="button" class="btn btn-default" data-dismiss="modal">取消</button>
                                <button type="button" class="btn btn-primary" id="addRecord">提交</button>
                            </div>
                        </div>
                    </div>
                </div>

            </div>
        </div>
    </div>
    <script src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
    <script src="http://apps.bdimg.com/libs/bootstrap/3.3.4/js/bootstrap.min.js"></script>
    <script src="assets/bootstrap-table.js"></script>
    <script src="assets/bootstrap-table-zh-CN.js"></script>
    <script type="text/javascript">
        $(function() {
            //根据窗口调整表格高度
            $(window).resize(function() {
                $('#mytab').bootstrapTable('resetView', {
                    height: tableHeight()
                })
            })

            $('#mytab').bootstrapTable({
                url: "index.php",//数据源
                dataField: "rows",//服务端返回数据键值 就是说记录放的键值是rows,分页时使用总记录数的键值为total
                height: tableHeight(),//高度调整
                search: true,//是否搜索
                pagination: true,//是否分页
                pageSize: 20,//单页记录数
                pageList: [5, 10, 20, 50],//分页步进值
                sidePagination: "server",//服务端分页
                contentType: "application/x-www-form-urlencoded",//请求数据内容格式 默认是 application/json 自己根据格式自行服务端处理
                dataType: "json",//期待返回数据类型
                method: "post",//请求方式
                searchAlign: "left",//查询框对齐方式
                queryParamsType: "limit",//查询参数组织方式
                queryParams: function getParams(params) {
                    //params obj
                    params.other = "otherInfo";
                    return params;
                },
                searchOnEnterKey: false,//回车搜索
                showRefresh: true,//刷新按钮
                showColumns: true,//列选择按钮
                buttonsAlign: "left",//按钮对齐方式
                toolbar: "#toolbar",//指定工具栏
                toolbarAlign: "right",//工具栏对齐方式
                columns: [
                    {
                        title: "全选",
                        field: "select",
                        checkbox: true,
                        width: 20,//宽度
                        align: "center",//水平
                        valign: "middle"//垂直
                    },
                    {
                        title: "ID",//标题
                        field: "id",//键名
                        sortable: true,//是否可排序
                        order: "desc"//默认排序方式
                    },
                    {
                        field: "name",
                        title: "NAME",
                        sortable: true,
                        titleTooltip: "this is name"
                    },
                    {
                        field: "age",
                        title: "AGE",
                        sortable: true,
                    },
                    {
                        field: "info",
                        title: "INFO[using-formatter]",
                        formatter: 'infoFormatter',//对本列数据做格式化
                    }
                ],
                onClickRow: function(row, $element) {
                    //$element是当前tr的jquery对象
                    $element.css("background-color", "green");
                },//单击row事件
                locale: "zh-CN", //中文支持
                detailView: false, //是否显示详情折叠
                detailFormatter: function(index, row, element) {
                    var html = '';
                    $.each(row, function(key, val){
                        html += "<p>" + key + ":" + val +  "</p>"
                    });
                    return html;
                }
            });

            $("#addRecord").click(function(){
                alert("name:" + $("#name").val() + " age:" +$("#age").val());
            });
        })

        function tableHeight() {
            return $(window).height() - 50;
        }
        /**
         * 列的格式化函数 在数据从服务端返回装载前进行处理
         * @param  {[type]} value [description]
         * @param  {[type]} row   [description]
         * @param  {[type]} index [description]
         * @return {[type]}       [description]
         */
        function infoFormatter(value, row, index)
        {
            return "id:" + row.id + " name:" + row.name + " age:" + row.age;
        }
    </script>
</body>
</html>

服务端:

<?php
/**
 * 服务端模拟数据
 */

//前端期望数据为json
header("Content-Type:application/json;charset=utf-8");
//post 请求 请求内容类型为 application/x-www-form-urlencoded 如果是 application/json 则需要另行处理 $_POST 数组不会被填充

//为了保持模拟的数据
session_start();

if ($_SESSION['emulate_data']) {
    //已生成
} else {
    $list = [];
    //第一次会模拟个数据
    for($i = 1; $i < 50; $i ++) {
        $list[] = [
                "id" => $i,
                "name" => substr(str_shuffle(implode('', range('a', 'z'))), 0, 5),
                "age" => mt_rand(10, 30)
            ];
    }
    $_SESSION['emulate_data'] = $list;
}

$list_temp = [];
//检索
if (isset($_POST['search']) && !empty($_POST['search'])) {
    foreach ($_SESSION['emulate_data'] as $key => $row) {
        if (strpos($row['name'], $_POST['search']) !== false 
        || strpos($row['age'], $_POST['search']) !== false) {
            $list_temp[] = $_SESSION['emulate_data'][$key];
        }
    }
} else {
    $list_temp = $_SESSION['emulate_data'];
}
//排序
if (isset($_POST['sort'])) {
    $temp = [];
    foreach ($list_temp as $row) {
        $temp[] = $row[$_POST['sort']];
    }
    //php的多维排序
    array_multisort($temp,
        $_POST['sort'] == 'name' ? SORT_STRING : SORT_NUMERIC,
        $_POST['order'] == 'asc' ? SORT_ASC : SORT_DESC,
        $list_temp
    );
}

//分页时需要获取记录总数,键值为 total
$result["total"] = count($list_temp);
//根据传递过来的分页偏移量和分页量截取模拟分页 rows 可以根据前端的 dataField 来设置
$result["rows"] = array_slice($list_temp, $_POST['offset'], $_POST['limit']);

echo json_encode($result);

需要注意的是

1、bootstrap table 可以前端分页也可以后端分页,这里我们使用的是后端分页,后端分页时需返回含有

total:总记录数 这个键值好像是固定的,我看文档没找到可以修改成别的

rows: 记录集合 键值可以修改  dataField 自己定义成自己想要的就好

{
    "total":200, 
    "rows":[
            {"id":1, "name":"sallency", "age": 26},
            {"id":1, "name":"sallency", "age": 26},
            {"id":1, "name":"sallency", "age": 26},
            {"id":1, "name":"sallency", "age": 26},
            {"id":1, "name":"sallency", "age": 26}]
}

如上的json数据(当然我前台设置的期望数据类型是json,php 直接encode一个 ["total"=>200, "rows"=>[[],[],][,][,]]的数组就完事了,方便)

2、且其请求后端是传递的内容格式默认为 application/json 我自己习惯用方便的 x-www-form-urlencoded

© 著作权归作者所有

big_cat
粉丝 48
博文 237
码字总数 162867
作品 0
长宁
后端工程师
私信 提问
加载中

评论(11)

山人4698
楼主,我把例子复制下来,只改了依赖文件的路径,但运行起来,只有一个按钮。请帮忙看看啥情况。
big_cat
big_cat 博主

引用来自“oshapeman”的评论

url可以改成别的api吗?比如豆瓣知乎的公开api…

引用来自“big_cat”的评论

可以啊,只要注意 js 需要跨域请求就好了

引用来自“oshapeman”的评论

可以在前端代码里面实现cors的方案吗
支持,bootstrap table 也是基于 jquery 的 ajax 的,你把 dataType 设为 jsonp 就可以了,不过前端的 cors,也就是 js callback 函数跨域,也是需要服务端配合的,我不知道这些公开的 api 是不是使用的 callback 方式作为公开 api 的
oshapeman
oshapeman

引用来自“oshapeman”的评论

url可以改成别的api吗?比如豆瓣知乎的公开api…

引用来自“big_cat”的评论

可以啊,只要注意 js 需要跨域请求就好了
可以在前端代码里面实现cors的方案吗
big_cat
big_cat 博主

引用来自“oshapeman”的评论

url可以改成别的api吗?比如豆瓣知乎的公开api…
可以啊,只要注意 js 需要跨域请求就好了
oshapeman
oshapeman
url可以改成别的api吗?比如豆瓣知乎的公开api…
big_cat
big_cat 博主

引用来自“cjyzwg”的评论

还有一个就是detailFormatter后面的冒号是中文了。谢谢楼主分享咯。顶顶顶
好的,已更正,3Q
c
cjyzwg
还有一个就是detailFormatter后面的冒号是中文了。谢谢楼主分享咯。顶顶顶
c
cjyzwg
楼主,是篇好文章,赞一个,但是在中文支持那里少了个逗号。😁
t
t-mac钟
bootstrap table 中文老是报错,能帮解决吗
big_cat
big_cat 博主

引用来自“zongzhen”的评论

楼主,这三个文件,都放一起吗?文件名分别是什么?
一个是页面文件,一个是我写的模拟后端分页的接口文件,你只要保证页面文件里的bootstrap table实例请求数据的url参数和后端文件匹配上就好,当然你把页面文件保存成index.html,把php保存成 index.php,用服务器访问 index.html 就能看到效果了
Bootstrap 表格

Bootstrap 提供了一个清晰的创建表格的布局。下表列出了 Bootstrap 支持的一些表格元素: 标签 描述 <table> 容纳以表格形式显示数据的元素。 <thead> 表格标题行的容器元素(<tr>),用来标...

wybo521
2016/01/26
47
0
easyui-table表格客户端分页实例

版权声明:本文为博主原创文章,如需转载,请标明出处。 https://blog.csdn.net/alan_liuyue/article/details/76783083 一、前言 前一篇博客已经介绍了bootstrap-table的客户端分页,而本...

尘光掠影
2017/08/06
0
0
bookstrap-table,简单实用配置实例

bookstrap下载:http://d.bootcss.com/bootstrap-3.3.5-dist.zip bookstrap-table下载:https://codeload.github.com/wenzhixin/bootstrap-table/zip/master jquery下载:http://www.jq22.com/......

路叫兽
2016/07/01
784
1
Bootstrap响应式前端框架笔记三——代码与表格

Bootstrap响应式前端框架笔记三——代码与表格 一、代码 在技术博客文章类页面的开发中,常常需要在文本总插入说明代码,使用code便签可以创建这种效果,示例如下: 效果如下: kbd标签可以用...

珲少
2016/12/05
187
0
Bootstrap Table简单例子学习

1、Bootstrap Table简介 Bootstrap Table是基于Bootstrap的轻量级表格插件,只需要简单的配置就可以实现强大的支持固定表头、单复选、排序、分页、搜索以及自定义表头等功能。 2、所需要的库...

Elven_Xu
2015/12/31
4.3K
2

没有更多内容

加载失败,请刷新页面

加载更多

OpenStack 简介和几种安装方式总结

OpenStack :是一个由NASA和Rackspace合作研发并发起的,以Apache许可证授权的自由软件和开放源代码项目。项目目标是提供实施简单、可大规模扩展、丰富、标准统一的云计算管理平台。OpenSta...

小海bug
今天
4
0
DDD(五)

1、引言 之前学习了解了DDD中实体这一概念,那么接下来需要了解的就是值对象、唯一标识。值对象,值就是数字1、2、3,字符串“1”,“2”,“3”,值时对象的特征,对象是一个事物的具体描述...

MrYuZixian
今天
6
0
数据库中间件MyCat

什么是MyCat? 查看官网的介绍是这样说的 一个彻底开源的,面向企业应用开发的大数据库集群 支持事务、ACID、可以替代MySQL的加强版数据库 一个可以视为MySQL集群的企业级数据库,用来替代昂贵...

沉浮_
今天
4
0
解决Mac下VSCode打开zsh乱码

1.乱码问题 iTerm2终端使用Zsh,并且配置Zsh主题,该主题主题需要安装字体来支持箭头效果,在iTerm2中设置这个字体,但是VSCode里这个箭头还是显示乱码。 iTerm2展示如下: VSCode展示如下: 2...

HelloDeveloper
今天
6
0
常用物流快递单号查询接口种类及对接方法

目前快递查询接口有两种方式可以对接,一是和顺丰、圆通、中通、天天、韵达、德邦这些快递公司一一对接接口,二是和快递鸟这样第三方集成接口一次性对接多家常用快递。第一种耗费时间长,但是...

程序的小猿
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部