一、设置展开层数
在实际运用中,我们可能需要在树形结构中只展示前几层数据,而后面的层级可以通过点击节点来逐层展开,这个时候我们可以使用Layui树形表格的目录树属性treeLevel
,通过设置该属性来控制初始化时展开的层数。
layui.use(['table'], function() {
var table = layui.table;
table.render({
elem: '#test',
url: '/api/data',
cols: [[
{ type: 'checkbox' },
{ field: 'id', title: 'ID' },
{ field: 'name', title: '名称', templet: function(d) {
return d.name;
}},
{ field: 'score', title: '分数' }
]],
treeLevel: 2, //设置展开到第二层
treeIndent: 15 //每一层缩进的像素数
});
});
在上述代码中,我们通过设置 table.render() 方法的treeLevel
属性为2,来控制只展开了树形表格的前两层数据。
二、layui树形表格过滤查询
在实际应用中,我们经常需要在树形结构中进行查找和过滤,Layui树形表格也提供了相应的过滤接口。treeFind
接口是在初始化表格的数据源中查找指定值所在的节点,并返回查找到的节点信息。接口的语法如下:
table.treeFind(data, property, value, children)
data
参数为数据源,property
参数为字段名称,value
参数为字段值,children
为节点的子节点,在树形结构中为必填项,一般为children
或childs
。
一般情况下,我们结合搜索框来使用该方法,代码示例如下:
<div class="layui-form-item">
<label class="layui-form-label">搜索</label>
<div class="layui-input-inline">
<input type="text" name="filter" placeholder="请输入名称" autocomplete="off" class="layui-input">
</div>
<button class="layui-btn" id="filter">搜索</button>
</div>
var data = [...]; //数据源
//搜索按钮点击事件
$('#filter').click(function() {
var value = $('input[name="filter"]').val();
if(value === '') { //搜索框为空时,直接重载表格
table.reload('test', {
data: data,
treeLevel: 2 //初始化时只展开前两层
});
} else { //搜索框不为空,过滤表格并展开到第一层
var result = table.treeFind(data, 'name', value, 'childs');
table.reload('test', {
data: result,
treeLevel: 1 //只展开第一层
});
}
});
在上述代码中,我们通过为“搜索”按钮添加点击事件,来触发过滤操作。通过读取搜索框的输入值来获取过滤关键字,然后调用table.treeFind
接口在数据源中查找符合条件的数据,并传递给表格的data
属性,重新渲染表格,同时也控制表格的treeLevel
属性来只展开第一层。
三、其他相关功能简述
1、展开全部节点
Layui树形表格提供了一个方法treeOpenAll
,可以展开全部节点。
table.treeOpenAll('test');
2、收起全部节点
Layui树形表格提供了一个方法treeCloseAll
,可以收起全部节点。
table.treeCloseAll('test');
3、获取当前节点信息
Layui树形表格提供了一个方法treeGetNode
,可以获取指定节点的信息。
//获取ID为1的节点信息
var node = table.treeGetNode('test', 'id', 1);
console.log(node);
4、监听树形节点单击事件
Layui树形表格提供了一个tree()
事件,可以在表格节点单击时触发相应处理方法。该事件中传递了节点信息node
和当前Click事件对象obj
,可以根据该对象来判断用户选择的是哪个节点。
table.on('tree(test)', function(obj) {
console.log(obj.node); //获取节点信息
});