【记录】使用BootStrapTable构造树形结构

需求:原使用 BootStrapTable 生成表格,现在需要形成树形结构,即有上下级,类似菜单的样式

测试版本,后面的列已省略

源码:

<!DOCTYPE HTML>
<html lang="zh-cn">

<head>
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta content="width=device-width,initial-scale=1.0" name="viewport">
    <meta content="yes" name="apple-mobile-web-app-capable">
    <meta content="black" name="apple-mobile-web-app-status-bar-style">
    <meta content="telephone=no" name="format-detection">
    <meta content="email=no" name="format-detection">
    <title>系统管理</title>
    <link href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
    <link href="https://cdn.bootcss.com/bootstrap-table/1.11.1/bootstrap-table.min.css" rel="stylesheet">
    <link rel="stylesheet" href="https://cdn.bootcss.com/jquery-treegrid/0.2.0/css/jquery.treegrid.min.css">
</head>

<body>
<div class="container">
    <h1>树形表格 : Table Treegrid</h1>
    <table id="table"></table>
    <br/>
</div>
</body>
<script src="https://cdn.bootcss.com/jquery/3.1.1/jquery.min.js"></script>
<script src="https://cdn.bootcss.com/bootstrap-table/1.12.1/bootstrap-table.min.js"></script>
<script src="https://cdn.bootcss.com/bootstrap-table/1.12.0/extensions/treegrid/bootstrap-table-treegrid.js"></script>
<script src="https://cdn.bootcss.com/jquery-treegrid/0.2.0/js/jquery.treegrid.min.js"></script>
<script type="text/javascript">
    var $table = $('#table');
    var data = JSON.parse(
        '[{"id":1,"pid":0,"name":"用户管理"},' +
        '{"id":2,"pid":0,"name":"系统管理"},' +
        '{"id":3,"pid":1,"name":"新增用户"},' +
        '{"id":4,"pid":1,"name":"修改用户"},' +
        '{"id":5,"pid":1,"name":"删除用户"},' +
        '{"id":6,"pid":2,"name":"系统配置管理"},' +
        '{"id":7,"pid":6,"name":"新增配置"},' +
        '{"id":8,"pid":6,"name":"修改配置"},' +
        '{"id":9,"pid":6,"name":"删除配置"},' +
        '{"id":10,"pid":2,"name":"系统日志管理"},' +
        '{"id":11,"pid":10,"name":"新增日志"},' +
        '{"id":12,"pid":10,"name":"修改日志"},' +
        '{"id":13,"pid":10,"name":"删除日志"}]');

    $(function() {
        $table.bootstrapTable({
            data:data,
            idField: 'id',
            dataType:'jsonp',
            columns: [
                { field: 'name',  title: '名称' },
            ],


            //在哪一列展开树形
            treeShowField: 'name',
            //指定父id列
            parentIdField: 'pid',

            onResetView: function(data) {
                //console.log('load');
                $table.treegrid({
                    initialState: 'collapsed',// 所有节点都折叠
                    // initialState: 'expanded',// 所有节点都展开,默认展开
                    treeColumn: 0,
                    // expanderExpandedClass: 'glyphicon glyphicon-minus',  //图标样式
                    // expanderCollapsedClass: 'glyphicon glyphicon-plus',
                    onChange: function() {
                        $table.bootstrapTable('resetWidth');
                    }
                });

                //只展开树形的第一级节点
                $table.treegrid('getRootNodes').treegrid('expand');

            },
        });
    });
</script>
</html>

如果列表中 id , pid 为字符串型,则修改 bootstrap-table-treegrid.js 中源码

onCheckRoot方法
        onCheckRoot: function (row, data) {
            var that = this;
            return !row[that.options.parentIdField];
        }
    });

修改为

        onCheckRoot: function (row, data) {
            var that = this;
            if (row[that.options.parentIdField] == '0') {
                return true;
            } else {
                return false;
            }
        }

页面源码:注意引入本地修改后的 bootstrap-table-treegrid.js

<!DOCTYPE HTML>
<html lang="zh-cn">

<head>
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta content="width=device-width,initial-scale=1.0" name="viewport">
    <meta content="yes" name="apple-mobile-web-app-capable">
    <meta content="black" name="apple-mobile-web-app-status-bar-style">
    <meta content="telephone=no" name="format-detection">
    <meta content="email=no" name="format-detection">
    <title>系统管理</title>
    <link href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
    <link href="https://cdn.bootcss.com/bootstrap-table/1.11.1/bootstrap-table.min.css" rel="stylesheet">
    <link rel="stylesheet" href="https://cdn.bootcss.com/jquery-treegrid/0.2.0/css/jquery.treegrid.min.css">

</head>

<body>
<div class="container">
    <h1>树形表格 : Table Treegrid</h1>
    <table id="table"></table>
    <br/>
</div>
</body>
<script src="https://cdn.bootcss.com/jquery/3.1.1/jquery.min.js"></script>
<script src="https://cdn.bootcss.com/bootstrap-table/1.12.1/bootstrap-table.min.js"></script>
<!--<script src="https://cdn.bootcss.com/bootstrap-table/1.12.0/extensions/treegrid/bootstrap-table-treegrid.js"></script>-->
<script src="https://cdn.bootcss.com/jquery-treegrid/0.2.0/js/jquery.treegrid.min.js"></script>
<script src="bootstrap-table-treegrid.js"></script>
<script type="text/javascript">
    var $table = $('#table');
    var data = JSON.parse(
        '[{"id":"yonghu","pid":"0","name":"用户管理"},' +
        '{"id":"xitong","pid":"0","name":"系统管理"},' +
        '{"id":"yonghu1","pid":"yonghu","name":"新增用户"},' +
        '{"id":"yonghu2","pid":"yonghu","name":"修改用户"},' +
        '{"id":"yonghu3","pid":"yonghu","name":"删除用户"}]');

    $(function() {
        $table.bootstrapTable({
            data:data,
            idField: 'id',
            dataType:'jsonp',
            columns: [
                { field: 'name',  title: '名称' },
            ],


            //在哪一列展开树形
            treeShowField: 'name',
            //指定父id列
            parentIdField: 'pid',

            onResetView: function(data) {
                //console.log('load');
                $table.treegrid({
                    initialState: 'collapsed',// 所有节点都折叠
                    // initialState: 'expanded',// 所有节点都展开,默认展开
                    treeColumn: 0,
                    // expanderExpandedClass: 'glyphicon glyphicon-minus',  //图标样式
                    // expanderCollapsedClass: 'glyphicon glyphicon-plus',
                    onChange: function() {
                        $table.bootstrapTable('resetWidth');
                    }
                });

                //只展开树形的第一级节点
                $table.treegrid('getRootNodes').treegrid('expand');

            },
        });
    });
</script>
</html>

另外数据中 Root 节点(父节点)的 pid 需要为字符串的 "0"  ,根据修改后的 bootstrap-table-treegrid.js 中 

onCheckRoot 方法而定
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Bootstrap Select2是一个基于jQuery的自定义下拉选择插件,可以让用户在一个优雅的界面中选择数据。 树形下拉是Bootstrap Select2的一个特殊功能,它允许我们将数据以树形结构展示在下拉框中,方便用户快速选择和搜索。 使用Bootstrap Select2树形下拉,首先需要引入Select2的库文件和相关样式。然后在HTML中创建一个下拉菜单的元素,并为其添加一个自定义的class。接下来,需要通过JavaScript来配置Select2插件。 配置Select2的时候,我们需要同时传入数据源以及一些额外的配置选项。对于树形下拉的数据源,我们可以使用一个以JSON对象的形式表示的树状结构。 例如,下面是一个简单的JSON对象,表示一个带有"节点1"和"节点2"的树形结构: { "id": 1, "text": "节点1", "children": [ { "id": 2, "text": "节点2" } ] } 在配置Select2的时候,我们可以用ajax方法获取这个JSON数据,并将其传入"data"选项中。 除了数据源外,我们还可以通过配置选项调整下拉框的外观和功能。例如,可以启用搜索功能,使用户能够在下拉框中快速查找节点。 最后,我们需要通过JavaScript来初始化Select2插件并将其应用到我们创建的下拉菜单元素上。 在使用过程中,用户可以通过点击下拉框,展开或折叠树形结构。他们可以通过输入关键字来搜索节点,并选择他们想要的节点。 总结起来,Bootstrap Select2树形下拉是一个强大的工具,可以方便地在界面上展示和搜索树状数据。这个功能可以通过合适的JSON数据源和一些配置选项来实现。同时,用户可以通过点击和搜索来选择他们想要的节点。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值