如何在Tabulator树形表格的每个嵌套分组首行添加按钮
实现方案
Tabulator的自定义formatter可以通过cell参数获取当前行实例,完全可以实现需求,具体实现如下:
核心判断逻辑
我们只需要在目标列的自定义formatter中判断两个条件:
- 当前行存在上级树节点(即不是顶层节点)
- 当前行是上级节点的第一个直接子节点
满足条件则渲染按钮,否则展示正常内容/留空。
完整代码示例
以下是可直接运行的Tabulator配置代码:
// 你给出的数据源 const yourDataSource = [ {id:1, name:"Billy Bob", age:"12", "_children":[ {id:2, name:"Mary May", age:"1"}, {id:3, name:"Christine Lobowski", age:"42"}, {id:4, name:"Brendon Philips", age:"125", "_children":[ {id:5, name:"Margret Marmajuke", age:"16"}, {id:6, name:"Frank Peoney", age:"12"}, ]}, ]}, {id:7, name:"Jenny Jane", age:"1"}, {id:8, name:"Martha Tiddly", age:"42", "_children":[ {id:9, name:"Frasier Franks", age:"125"}, ]}, {id:10, name:"Bobby Green", age:"11"}, ] // Tabulator初始化 const table = new Tabulator("#example-table", { data: yourDataSource, dataTree: true, // 开启树结构 dataTreeStartExpanded: true, // 默认展开所有节点方便查看效果 columns: [ { title: "姓名", field: "name" }, { title: "年龄", field: "age" }, { title: "操作", formatter: function (cell) { const currentRow = cell.getRow(); const parentRow = currentRow.getTreeParent(); // 无父节点的顶层行直接返回空 if (!parentRow) return ""; // 获取父节点的所有直接子节点 const parentChildren = parentRow.getTreeChildren(); // 判断是否为父节点的第一个子节点 if (parentChildren.length > 0 && parentChildren[0] === currentRow) { // 可自定义按钮样式、绑定点击事件 return "<button class='custom-action-btn'>目标按钮</button>"; } return ""; }, width: 120, }, ], });
拓展说明
如果需要把按钮嵌入到现有列(比如姓名列)中,只需要把formatter逻辑写到对应列的配置里,返回 cell.getValue() + 按钮HTML 即可。按钮点击事件可以通过Tabulator的cellClick事件监听,也可以直接通过全局事件委托绑定。
内容的提问来源于stack exchange,提问作者LivingAntelope
相关产品推荐
相关产品推荐

