需求:原使用 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 方法而定