Bootstrap学习笔记之Nestable可拖拽树结构

合集下载

bootstraptreetable手册

bootstraptreetable手册

bootstraptreetable是一个基于Bootstrap框架的树形表格插件,它可以帮助开发者轻松实现树形结构的数据展示和管理。

本手册将介绍bootstraptreetable的基本用法、相关参数和事件,帮助开发者更好地理解和使用该插件。

一、基本用法1. 引入依赖在使用bootstraptreetable之前,首先需要引入Bootstrap框架和jQuery库作为依赖。

可以通过CDN或下载本地文件的方式引入bootstraptreetable的源码。

2. 初始化插件在HTML页面中,可以通过以下代码初始化bootstraptreetable插件:```javascript$('#treeTable').bootstrapTreeTable({data: data, // 数据源expandColumn: '1', // 展开列id: 'id', // 数据唯一标识parentId: 'pid', // 父节点标识columns: [ // 表格列配置{field: 'name',title: '名称'},{field: 'value',title: '值'}]});```以上代码中,`#treeTable`是页面中table元素的id,`data`是树形数据的源数据,`expandColumn`指定展开操作的列,`id`和`parentId`分别指定数据的唯一标识和父节点标识,`columns`定义了表格的列配置。

3. 事件监听bootstraptreetable提供了丰富的事件,开发者可以通过监听这些事件来实现自定义的操作。

可以监听`onLoadSuccess`事件来在数据加载完成后进行一些操作,也可以监听`onExpand`和`onCollapse`事件来处理节点展开和折叠的操作。

bootstrap-table常用总结-树形结构(展开和折叠)

bootstrap-table常用总结-树形结构(展开和折叠)

bootstrap-table常⽤总结-树形结构(展开和折叠) 今天在⼯作的时候,遇到了⼀个需求,就是需要⼀键展开或者关闭树形结构。

关于树形结构的不是很熟悉,然后去百度,结果也不是很准确。

最后经过Google才找到。

下⾯分享给⼤家直接看代码:1var flag = true;//开启还是关闭的标志位2function change_tree(target){3if(flag){4//$table.treegrid('getRootNodes').treegrid('expand');5//$table.treegrid('getParentNode').treegrid('expand');6 $table.treegrid('expandAll');7 flag = !flag;8 }else{9//$table.treegrid('getRootNodes').treegrid('collapse');10//$table.treegrid('getParentNode').treegrid('collapse');11 $table.treegrid('collapseAll');12 flag = !flag;13 }14 }上⾯的是折叠,下⾯的是展开。

有⼀个标志位,每次执⾏不同的代码。

然后把找到的表格贴在下⾯,⽅便⼤家查阅(侵删)常⽤的配置项,这个表格可以和我参数类型默认值描述treeColumn Numeric0树中表格中的哪⼀列initialState String expanded 初始化时树的状态'expanded' - 所有节点都展开'collapsed' - 所有节点都折叠saveState Boolean false如果是true树的再次加载页⾯的时候树的状态将保存saveStateMethod String cookie 'cookie' - 保存cookie的状态'hash' - 保存hash的状态saveStateName String tree-grid-state通过cookie或hash的名字来保存状态expanderTemplate String<span class="treegrid-expander"></span>点击HTML元素时将折叠或展开分⽀expanderExpandedClass String treegrid-expander-expanded当它展开的时候可以使⽤扩展元素expanderCollapsedClass String treegrid-expander-collapsed当它折叠的时候可以使⽤扩展元素indentTemplate String<span class="treegrid-indent"></span>HTML元素将根据深度嵌套节点做填充然后下⾯是重头戏了,就是我们常⽤到的⼀些⽅法,都是有分封装的。

react树状结构拖拽

react树状结构拖拽

react树状结构拖拽React是一个用于构建用户界面的JavaScript库。

它提供了一种声明式的方式来定义用户界面的组件,使得开发人员可以通过创建可重用的组件来构建复杂的应用程序。

其中一个常见的需求是在React应用程序中实现树状结构拖拽。

树状结构是一种具有层次结构的数据结构,每个节点可以有多个子节点。

拖拽则是指用户可以通过鼠标或触摸来移动元素的操作。

在React中实现树状结构拖拽需要考虑以下几个方面:1.组件层次结构:首先,需要确定树形结构的数据如何组织。

最简单的方法是使用JSON对象来表示树的结构,每个节点包含一个id 和一个children属性。

组件的层次结构可以通过递归的方式来处理,即每个节点包含一个子组件作为其子节点。

2.拖拽功能:接下来,需要实现拖拽功能。

React并没有内置的拖拽支持,但可以使用HTML5的拖拽API来实现。

通过使用dragstart、dragover和drop事件,可以跟踪拖拽的起始位置、当前位置和目标位置。

在相应的事件处理函数中,需要更新树形结构的数据,然后重新渲染组件。

3.组件状态管理:为了实现拖拽功能,需要在组件之间传递拖拽相关的信息。

可以使用React的Context和useContext钩子来传递状态。

通过在父组件中定义拖拽相关的状态,子组件可以通过useContext钩子访问这些状态并进行相应的操作。

4.样式与动画:为了提升用户体验,可以为树状结构的拖拽添加一些样式和动画效果。

可以使用CSS来定义样式,并使用React的CSS 过渡动画库或其他动画库来实现动画效果。

总结起来,实现React树状结构拖拽需要考虑组件层次结构、拖拽功能、组件状态管理以及样式与动画。

通过合理的组织组件结构,使用HTML5的拖拽API,并结合React的状态管理和动画库,可以实现一个可拖拽的树状结构组件。

这样的组件可以在各种场景中使用,如展示文件目录结构、实现可排序的列表等。

java 树结构拖拽节点方法

java 树结构拖拽节点方法

java 树结构拖拽节点方法摘要:1.树结构概述2.拖拽节点原理3.实现拖拽节点的方法4.示例代码及解释5.总结正文:随着大数据和互联网技术的发展,树结构在许多领域得到了广泛应用。

树结构是一种层次化的数据结构,由节点和边组成。

在树结构中,节点可以具有任意数量的子节点,每个节点都有一个父节点(除了根节点)。

在某些场景下,我们需要实现树结构的拖拽功能,例如在图形界面中调整节点位置或层级关系。

本文将介绍如何实现Java树结构中的拖拽节点方法。

一、树结构概述树结构是一种重要的非线性数据结构,具有层级关系。

树的每个节点都有一个唯一的标识,通过边与其它节点相连。

树结构的应用场景包括文件系统、编译器、数据库索引等。

在实际应用中,我们通常使用自定义的类来表示树节点,例如`TreeNode`类。

二、拖拽节点原理拖拽节点是指在树结构中通过拖动节点来改变其层级关系。

实现拖拽节点的方法的关键是对节点进行重新排序。

具体来说,我们需要记录当前节点的原始位置,然后在拖拽过程中更新节点的位置信息,并相应地更新边的关系。

在拖拽结束后,需要重新调整树结构以满足节点间的层级关系。

三、实现拖拽节点的方法1.创建一个拖拽节点类,继承自`TreeNode`类,添加拖拽相关的属性和方法。

2.在`TreeNode`类中添加一个`removeFromParent`方法,用于移除节点与其父节点之间的连接。

3.在`TreeNode`类中添加一个`addChild`方法,用于将节点添加到另一个节点的子节点列表中。

4.实现一个`TreeDragListener`接口,用于处理拖拽过程中的事件。

5.为每个节点添加一个`TreeDragListener`实例,并在拖拽过程中调用相应的方法。

6.重写`TreeNode`类的`remove`方法,在删除节点时调用`removeFromParent`方法。

四、示例代码及解释以下是一个简单的示例代码,演示了如何实现Java树结构中的拖拽节点方法:```javaclass TreeNode {int id;int parentId;TreeNode parent;List<TreeNode> children;// 省略构造方法和其它方法void removeFromParent() {if (parent != null) {parent.children.remove(this);}}void addChild(TreeNode child) {if (children == null) {children = new ArrayList<>();}children.add(child);}// 省略其它方法}class TreeDragListener {void onNodeDragStart(TreeNode node) {// 处理拖拽开始事件}void onNodeDragOver(TreeNode node, int dx, int dy) { // 处理拖拽过程中事件}void onNodeDragEnd(TreeNode node) {// 处理拖拽结束事件}}class MyTree extends TreeNode {TreeDragListener dragListener;public MyTree(TreeDragListener dragListener) {this.dragListener = dragListener;}@Overridepublic void remove() {super.remove();if (dragListener != null) {dragListener.onNodeDragEnd(this);}}}// 省略主程序和测试代码```五、总结在Java树结构中实现拖拽节点功能,需要对节点进行重新排序,并处理拖拽过程中的事件。

JS组件系列——BootstrapTable表格行拖拽

JS组件系列——BootstrapTable表格行拖拽

JS组件系列——BootstrapTable表格⾏拖拽前⾔:之前⼀直在研究DDD相关知识,好久没更新JS系列⽂章了。

这两天做了⼀个简单的业务需求,觉得效果还可以,今天在这⾥分享给⼤家,欢迎拍砖~~⼀、业务需求及实现效果项⽬涉及到订单模块,那天突然接到⼀个需求,说是两种不同状态的订单之间要实现插单的效果,页⾯上呈现⽅式是:左右两个Table,左边Table⾥⾯是状态为1的订单,右边Table⾥⾯是状态为2订单,左边Table⾥⾯的⾏数据拖动到右边Table⾥⾯指定⾏的位置,拖动完成后,左边表格减少⼀⾏,右边表格增加⼀⾏。

除此之外,还需要撤销操作(相当于Ctrl + Z操作),能够返回到上⼀步的状态。

可能描述会让⼤家模拟两可,反正已经实现了,先来看看效果图吧。

1、先看看拖动之前的效果2、这是拖动左边表格⾏数据的效果3、拖动⼀⾏完成之后表格数据的效果4、第⼆次、第三次拖动完成后效果5、右边表格上⾯撤销操作点击效果6、多次点击撤销,表格回到初始状态⼆、代码⽰例初初接到需求,博主的第⼀感觉是应该上Bootstrap table api⾥⾯找⼀下,毕竟开源的⼒量是强⼤的,或许有相关的⽰例呢。

经过⼀番查找,很可惜,Bootstrap Table没有这种两张表格之间的操作。

想想其实也可以理解,Bootstrap Table是针对某个动态表格数据绑定的,它的侧重点是表格内部的功能,⽐如表格内部⾏的拖拽排序(Reorder Rows)有很好的解决⽅案,对于像博主这样的特殊需求,似乎也应该⾃⼰去实现。

1、需求分析既然决定⾃⼰去写,博主开始分析需求,似乎这个操作⾥⾯⽐较困难的是拖拽效果,说到拖拽效果,原来使⽤JsPlumb的时候那使⽤太多了,于是就想到了我们神奇的JQuery UI ⾥⾯的draggable.js 和droppable.js。

拖拽的问题解决了,那么还有⼀个难点,就是撤销操作怎么办?我们知道Ctrl+z的意思是还原,什么叫还原?就是返回到上⼀步的操作,那么前提是要能够保存上⼀步的状态,说到保存某⼀步的状态,博主就知道怎么做了,需要⼀个全局变量Json,⾥⾯要有三个键值对,分别是当前步骤的索引、左边表格的数据、右边表格的数据。

BootstrapTable列宽拖动的方法

BootstrapTable列宽拖动的方法

BootstrapTable列宽拖动的⽅法在之前做过的⼀个web项⽬中,前端表格是基于jQuery和Bootstrap Table做的,客户要求能利⽤拖动改变列宽,为了总结和备忘,现将实现的过程记录如下:进⼊之后,找到Resizable插件,点击Home进⼊github可以找到详细的⽤法。

<script src="colResizable-1.6.min.js"></script><script src="extensions/bootstrap-table-resizable.js"></script>3. 另外,在使⽤Bootstrap Table的时候,建议⽤js去设置table的列属性,即按照如下⽅式:$('#myTable').bootstrapTable({url: url,method: 'post',columns:[{align: 'center',checkbox:true,width:'15',valign: 'middle'},{field: 'name',title: '名称',align: 'center',width:'100',valign: 'middle'},{field: 'desc',title: '描述',width:500,align: 'left',valign: 'middle'}]});上⾯这种⽅式可以通过修改width的⼤⼩来直接修改列的宽度。

⽽还有⼀种写法是在HTML中设置table的列头部,这种⽅式是很难调整宽度的,且很容易导致列头与内容⽆法对齐,是不推荐的,例如:<thead><tr><th data-field="id" data-width="50px">编号</th><th data-field="name" data-width="100px">姓名</th><th data-field="desc" data-width="120px">描述</th></tr></thead>总结以上所述是⼩编给⼤家介绍的Bootstrap Table列宽拖动的⽅法,希望对⼤家有所帮助,如果⼤家有任何疑问请给我留⾔,⼩编会及时回复⼤家的。

bootstraptreetable 参数

bootstraptreetable 参数

bootstraptreetable 参数BootstrapTreeTable是一个基于Bootstrap和jQuery的插件,用于创建带有树形结构的表格。

它提供了丰富的参数和选项,可以定制表格的外观和行为。

本文将详细介绍BootstrapTreeTable的各个参数及其用法。

1. 树形结构参数(treeColumn)treeColumn参数用于指定包含树形结构的列。

它接收一个数值类型的参数,表示表格中的第几列是树形结构列。

例如,如果treeColumn 的值为1,则表示第一列是树形结构列。

注意,树形结构列必须是HTML中的<th>元素。

2. 初始展开行(expandAll)expandAll参数用于指定初始化时是否展开所有行。

它接收一个布尔值的参数,true表示展开所有行,false表示只展开根节点行。

默认值为false。

3. 节点选择(onNodeSelected)onNodeSelected参数用于指定节点选择的回调函数。

它接收一个函数作为参数,当用户选择一个节点时,这个函数将被调用。

在回调函数中,可以获取到选择的节点的相关信息,并进行相关处理。

4. 节点展开/折叠(onNodeExpanded、onNodeCollapsed)onNodeExpanded和onNodeCollapsed参数分别用于指定节点展开和折叠时的回调函数。

它们接收一个函数作为参数,当用户展开或折叠一个节点时,这些函数将被调用。

在回调函数中,可以获取到展开/折叠的节点的相关信息,并进行相关处理。

5. 节点图标(nodeIcon、expandIcon、collapseIcon)nodeIcon参数用于指定节点的图标。

它接收一个字符串类型的参数,表示节点的图标样式类。

例如,nodeIcon: 'glyphicon glyphicon-file'表示节点使用Bootstrap的图标库中的文件图标。

前端树形结构数据拖拽原理

前端树形结构数据拖拽原理

前端树形结构数据拖拽原理Tree structure is commonly used in front-end development to display hierarchical data, and the drag-and-drop function is often needed to allow users to rearrange the tree structure. The drag-and-drop feature allows users to easily move items within the tree structure, which improves the user experience and increases the usability of the application.在前端开发中,树状结构常用于显示层级数据,而拖拽功能经常用于允许用户重新排列树状结构。

拖拽功能允许用户轻松地在树状结构内移动项目,从而提高用户体验,增加应用程序的可用性。

One of the key considerations in implementing tree structure drag-and-drop is to decide how the data should be stored and manipulated. It's important to determine the data structure that can best support the drag-and-drop feature, as well as the methods for updating the data when items are moved within the tree.在实现树形结构拖拽时,关键之一是决定数据应如何存储和操作。

确定最能支持拖拽功能的数据结构及项目移动时更新数据的方法非常重要。

bootstrap-table-treegrid 用法

bootstrap-table-treegrid 用法

bootstrap-table-treegrid是一个扩展插件,用于bootstrap-table,使其支持树形数据的展示。

以下是使用bootstrap-table-treegrid的基本步骤和用法:1. 引入必要的文件确保你已经引入了Bootstrap、jQuery、bootstrap-table 和bootstrap-table-treegrid 的相关文件。

html复制代码<!-- jQuery --><script src="path/to/jquery.min.js"></script><!-- Bootstrap --><link rel="stylesheet" href="path/to/bootstrap.min.css"><script src="path/to/bootstrap.min.js"></script><!-- bootstrap-table --><link rel="stylesheet" href="path/to/bootstrap-table.min.css"><script src="path/to/bootstrap-table.min.js"></script><!-- bootstrap-table-treegrid --><script src="path/to/bootstrap-table-treegrid.min.js"></script> 2. 准备数据准备你的树形数据。

数据通常是一个对象数组,其中每个对象都有一个表示其子项的children属性。

bootstrap sortable 参数

bootstrap sortable 参数

bootstrap sortable 参数
Bootstrap Sortable 是一款基于Bootstrap的可排序表格插件。

它有以下参数:
1. `handle`: 设置拖动排序时的句柄元素,默认为null,表示整
行都可拖动排序。

2. `itemSelector`: 设置可排序的元素的选择器,默认为'tr',表
示可排序的是表格的行。

3. `dragImageOpacity`: 设置拖动时拖影的透明度,默认为0.8。

4. `exclude`: 设置不可排序的元素的选择器,默认为空,表示
所有元素都可排序。

5. `onDragStart`: 当开始拖动元素时触发的回调函数。

6. `onDragEnd`: 当拖动元素结束时触发的回调函数。

7. `onOrderChange`: 当排序发生变化时触发的回调函数。

以上是一些常用的参数,还有其他一些参数可以参考Bootstrap Sortable的官方文档。

bootstrap-table常用总结-树形结构

bootstrap-table常用总结-树形结构

bootstrap-table常⽤总结-树形结构效果代码<!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:///bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"><link href="https:///bootstrap-table/1.11.1/bootstrap-table.min.css" rel="stylesheet"><link rel="stylesheet" href="https:///jquery-treegrid/0.2.0/css/jquery.treegrid.min.css"></head><body><div class="container"><h1>树形表格: Table Treegrid</h1><table id="table"></table><br/><button onclick="test()">选择</button></div></body><script src="https:///jquery/3.1.1/jquery.min.js"></script><script src="https:///bootstrap-table/1.12.1/bootstrap-table.min.js"></script><script src="https:///bootstrap-table/1.12.0/extensions/treegrid/bootstrap-table-treegrid.js"></script><script src="https:///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,"status":1,"name":"⽤户管理","permissionValue":"open:user:manage"},' +'{"id":2,"pid":0,"status":1,"name":"系统管理","permissionValue":"open:system:manage"},' +'{"id":3,"pid":1,"status":1,"name":"新增⽤户","permissionValue":"open:user:add"},' +'{"id":4,"pid":1,"status":1,"name":"修改⽤户","permissionValue":"open:user:edit"},' +'{"id":5,"pid":1,"status":0,"name":"删除⽤户","permissionValue":"open:user:del"},' +'{"id":6,"pid":2,"status":1,"name":"系统配置管理","permissionValue":"open:systemconfig:manage"},' +'{"id":7,"pid":6,"status":1,"name":"新增配置","permissionValue":"open:systemconfig:add"},' +'{"id":8,"pid":6,"status":1,"name":"修改配置","permissionValue":"open:systemconfig:edit"},' +'{"id":9,"pid":6,"status":0,"name":"删除配置","permissionValue":"open:systemconfig:del"},' +'{"id":10,"pid":2,"status":1,"name":"系统⽇志管理","permissionValue":"open:log:manage"},' +'{"id":11,"pid":10,"status":1,"name":"新增⽇志","permissionValue":"open:log:add"},' +'{"id":12,"pid":10,"status":1,"name":"修改⽇志","permissionValue":"open:log:edit"},' +'{"id":13,"pid":10,"status":0,"name":"删除⽇志","permissionValue":"open:log:del"}]');$(function() {//控制台输出⼀下数据console.log(data);$table.bootstrapTable({data:data,idField: 'id',dataType:'jsonp',columns: [{ field: 'check', checkbox: true, formatter: function (value, row, index) {if (row.check == true) {// console.log(row.serverName);//设置选中return { checked: true };}}},{ field: 'name', title: '名称' },// {field: 'id', title: '编号', sortable: true, align: 'center'},// {field: 'pid', title: '所属上级'},{ field: 'status', title: '状态', sortable: true, align: 'center', formatter: 'statusFormatter' },{ field: 'permissionValue', title: '权限值' },{ field: 'operate', title: '操作', align: 'center', events : operateEvents, formatter: 'operateFormatter' },],// bootstrap-table-treegrid.js 插件配置 -- start//在哪⼀列展开树形treeShowField: 'name',//指定⽗id列parentIdField: 'pid',onResetView: function(data) {//console.log('load');$table.treegrid({initialState: 'collapsed',// 所有节点都折叠// initialState: 'expanded',// 所有节点都展开,默认展开treeColumn: 1,// expanderExpandedClass: 'glyphicon glyphicon-minus', //图标样式// expanderCollapsedClass: 'glyphicon glyphicon-plus',onChange: function() {$table.bootstrapTable('resetWidth');}});//只展开树形的第⼀级节点$table.treegrid('getRootNodes').treegrid('expand');},onCheck:function(row){var datas = $table.bootstrapTable('getData');// 勾选⼦类selectChilds(datas,row,"id","pid",true);// 勾选⽗类selectParentChecked(datas,row,"id","pid")// 刷新数据$table.bootstrapTable('load', datas);},onUncheck:function(row){var datas = $table.bootstrapTable('getData');selectChilds(datas,row,"id","pid",false);$table.bootstrapTable('load', datas);},// bootstrap-table-treetreegrid.js 插件配置 -- end});});// 格式化按钮function operateFormatter(value, row, index) {return ['<button type="button" class="RoleOfadd btn-small btn-primary" style="margin-right:15px;"><i class="fa fa-plus" ></i>&nbsp;新增</button>','<button type="button" class="RoleOfedit btn-small btn-primary" style="margin-right:15px;"><i class="fa fa-pencil-square-o" ></i>&nbsp;修改</button>', '<button type="button" class="RoleOfdelete btn-small btn-primary" style="margin-right:15px;"><i class="fa fa-trash-o" ></i>&nbsp;删除</button>'].join('');}// 格式化类型function typeFormatter(value, row, index) {if (value === 'menu') { return '菜单'; }if (value === 'button') { return '按钮'; }if (value === 'api') { return '接⼝'; }return '-';}// 格式化状态function statusFormatter(value, row, index) {if (value === 1) {return '<span class="label label-success">正常</span>';} else {return '<span class="label label-default">锁定</span>';}}//初始化操作按钮的⽅法window.operateEvents = {'click .RoleOfadd': function (e, value, row, index) {add(row.id);},'click .RoleOfdelete': function (e, value, row, index) {del(row.id);},'click .RoleOfedit': function (e, value, row, index) {update(row.id);}};</script><script>/*** 选中⽗项时,同时选中⼦项* @param datas 所有的数据* @param row 当前数据* @param id id 字段名* @param pid ⽗id字段名*/function selectChilds(datas,row,id,pid,checked) {for(var i in datas){if(datas[i][pid] == row[id]){datas[i].check=checked;selectChilds(datas,datas[i],id,pid,checked);};}}function selectParentChecked(datas,row,id,pid){for(var i in datas){if(datas[i][id] == row[pid]){datas[i].check=true;selectParentChecked(datas,datas[i],id,pid);};}}function test() {var selRows = $table.bootstrapTable("getSelections"); if(selRows.length == 0){alert("请⾄少选择⼀⾏");return;}var postData = "";$.each(selRows,function(i) {postData += this.id;if (i < selRows.length - 1) {postData += ", ";}});alert("你选中⾏的 id 为:"+postData);}function add(id) {alert("add ⽅法 , id = " + id);}function del(id) {alert("del ⽅法 , id = " + id);}function update(id) {alert("update ⽅法 , id = " + id);}</script></html>。

BootStraptable实现表格行拖拽效果

BootStraptable实现表格行拖拽效果

BootStraptable实现表格⾏拖拽效果本⽂实例为⼤家分享了BootStrap table实现表格⾏拖拽的具体代码,供⼤家参考,具体内容如下不上图了⾸先还是得添加三个⽂件,⾃⼰上⽹搜搜就⾏<script src="~/Content/bootstrap-table/jquery.tablednd.js"></script><script src="~/Content/bootstrap-table/bootstrap-table-reorder-rows.js"></script><link href="~/Content/bootstrap-table/bootstrap-table-reorder-rows.css" rel="stylesheet"/>前台,加在Bootstrap Table 属性⾥⾯//当选中⾏,拖拽时的哪⾏数据,并且可以获取这⾏数据的上⼀⾏数据和下⼀⾏数据onReorderRowsDrag: function(table, row) {//取索引号dragbeforeidx = $(row).attr("data-index");},//拖拽完成后的这条数据,并且可以获取这⾏数据的上⼀⾏数据和下⼀⾏数据onReorderRowsDrop: function (table, row) {//取索引号draglateridx = $(row).attr("data-index");},//当拖拽结束后,整个表格的数据onReorderRow: function (newData) {//这⾥的newData是整个表格数据,数组形式if (dragbeforeidx != draglateridx) {//这是我其他地⽅需要的,你们可不必要这个//console.log(newData); 调试⽤代码$.post("Sort",{ jsondata: JSON.stringify(newData) },//将整张表数据Post,当然,先序列化成Jsonfunction(data) {if (data == "success") {$table.bootstrapTable('refresh');}});}}后台代码Controllerpublic string Sort(string jsondata){//将json序列化为List<T>JavaScriptSerializer serializer = new JavaScriptSerializer();List<WorkFlow> list = serializer.Deserialize<List<WorkFlow>>(jsondata);BLL.Base.WorkFlow bllworkflow = new BLL.Base.WorkFlow();var result = bllworkflow.Sort(list);return result;}排序的思路:当前台拖动完成后,将整个表格数据传⼊后台,先删除之前数据库中的数据,重新保存当前数据实现排序。

树节点可拖拽表结构设计

树节点可拖拽表结构设计

树节点可拖拽表结构设计咱们先来说说什么是树节点。

你看大树,它有树干,树干上会长出树枝,树枝上又会有小树枝或者树叶。

这大树就像我们说的树结构,树干就是最开始的那个大节点,树枝就是小节点啦。

在这个可拖拽的表结构里,每个节点就像大树上的一部分。

比如说,我们要做一个家庭人物关系的表。

爷爷就是那个最大的树干节点,他下面有爸爸、叔叔这些树枝节点,爸爸下面又有我和哥哥这样的小树枝节点。

那什么是可拖拽呢?就像你玩拼图或者搭乐高的时候,可以把一块东西从一个地方拿到另一个地方。

在这个表结构里,我们也能这样做。

比如说,我们发现把叔叔这个节点放到爷爷下面不太合适了,想把他放到奶奶下面。

那我们就可以像拖小玩具一样,把代表叔叔的这个节点拖到奶奶的下面。

这就好像是在重新安排我们的家庭树一样,是不是很神奇呀?我们再来讲讲这个表结构的设计。

想象一下,我们要做一个学校班级的表。

老师是最上面的大节点,然后每个小组是树枝节点,小组里的同学就是小树枝节点。

我们在设计这个表的时候,就要想清楚谁是谁的“上级”,谁是谁的“下级”。

就像在班级里,班长要管理各个小组的组长,组长要管理小组里的同学。

这个管理关系就像是树的结构一样。

而且,这个表结构还得方便我们拖拽。

比如说,有个同学从一个小组转到了另一个小组,那我们就可以轻松地把这个同学的节点从原来的小组拖到新的小组里。

我给你们讲个小故事吧。

小明的班级要做一个活动安排的表结构。

最开始,他们把所有的活动都按照日期来分节点,像周一的活动是一个大节点,下面有上午和下午的小节点,上午的小节点下面又有各个具体活动的小小节点。

可是后来,他们发现按照活动类型来分更好。

于是,他们就开始拖拽这些节点。

他们把跳绳比赛这个节点从原来按照日期的地方,拖到了体育活动这个新的大类型节点下面。

这样一调整,整个活动安排表就变得更清晰了,就像重新整理了自己的小书架一样,每样东西都放在了更合适的地方。

element table 树表 同级拖拽排序

element table 树表 同级拖拽排序

树表是一种常见的数据展示方式,它以树状结构呈现数据,并且在每个节点下方还可以包含多个表格,以更加详细的方式展示数据。

树表的优势在于能够清晰地展示数据间的层级关系,使得用户可以更加方便地进行数据查看与对比。

树表中的同级拖拽排序功能也是其非常实用的特性之一。

在实际应用中,很多树表都具有拖拽排序的功能。

这意味着用户可以通过拖拽节点的方式来改变节点的顺序,从而实现对同级节点的排序。

同级拖拽排序在树表中有着广泛的应用场景。

在一个多层级的组织结构树中,如果需要调整同级部门的顺序,那么拖拽排序就可以发挥作用。

又在一个包含多个同级商品分类的树表中,通过拖拽排序可以很方便地调整它们的显示顺序,从而更好地满足用户的需求。

同级拖拽排序不仅仅可以改变节点的顺序,还可以用于节点的移动和归并。

将一个节点拖拽到另一个节点上方,就可以将其移动至另一个父节点之下;而将一个节点拖拽到另一个节点上方,又在一定程度上实现了节点的合并。

这种拖拽排序的灵活性,让用户可以更加便捷地进行数据操作。

在实现同级拖拽排序时,一些细节问题也需要考虑到。

拖拽时的视觉反馈、拖拽过程中的合法性验证、拖拽结束后的数据处理等等。

这些都需要考虑到,才能够保证拖拽排序功能的稳定性和易用性。

树表作为一种数据展示的方式,在实际应用中具有非常广泛的价值。

而其中的同级拖拽排序功能,更是为用户提供了极大的便利,使得数据的显示和操作更加灵活和高效。

希望随着技术的进步,树表在未来能够在更多的场景中得到应用,并且拖拽排序等功能能够得到进一步的完善和提升。

以上是对于主题 "element table 树表同级拖拽排序" 的一个总结和回顾性的内容。

希望能够帮助您更加全面、深刻和灵活地理解这一主题。

树表是一种常见的数据展示方式,它以树状结构呈现数据,并且在每个节点下方还可以包含多个表格,以更加详细的方式展示数据。

树表的优势在于能够清晰地展示数据间的层级关系,使得用户可以更加方便地进行数据查看与对比。

element-table(树形结构),实现同级拖动排序

element-table(树形结构),实现同级拖动排序

element-table(树形结构),实现同级拖动排序引言概述:在现代的网页设计和开发中,树形结构是一种常见的数据展示方式,而element-table作为一种常用的表格组件,具备了树形结构的特点,可以实现同级拖动排序的功能。

本文将介绍element-table的使用方法和实现同级拖动排序的具体步骤。

正文内容:1. element-table的基本用法1.1 表格的引入和初始化1.2 数据的绑定和展示1.3 表头和表体的设置1.4 分页和筛选功能的添加1.5 数据的编辑和删除2. 实现同级拖动排序的步骤2.1 给表格添加拖动排序的功能2.2 监听拖动事件并获取相关数据2.3 更新数据并重新渲染表格2.4 实现同级拖动排序的效果2.5 处理拖动排序后的回调操作3. 拖动排序的优化和注意事项3.1 限制拖动的范围和方向3.2 添加动画效果提升用户体验 3.3 处理拖动过程中的并发问题 3.4 避免拖动排序导致的数据混乱3.5 兼容性和性能优化的考虑4. 实际应用场景和案例分析4.1 树形菜单的拖动排序4.2 组织架构图的节点排序4.3 任务列表的优先级调整4.4 商品分类的排序调整4.5 其他需要同级拖动排序的场景5. element-table的其他功能和扩展 5.1 表格的分组和合并5.2 自定义列的设置和渲染5.3 表格的导出和导入功能5.4 数据的批量操作和批量编辑 5.5 其他与表格相关的功能和扩展总结:通过本文的介绍,我们了解了element-table的基本用法和实现同级拖动排序的具体步骤。

同时,我们还探讨了拖动排序的优化和注意事项,以及实际应用场景和案例分析。

最后,我们还提到了element-table的其他功能和扩展,使得表格的使用更加灵活和便捷。

希望本文能够帮助读者更好地理解和应用element-table的同级拖动排序功能。

element-table(树形结构),实现同级拖动排序

element-table(树形结构),实现同级拖动排序

element-table(树形结构),实现同级拖动排序element-table是Element UI 中的一个表格组件,可以方便地实现表格的展示和操作。

对于树形结构的表格,你可以使用el-table-column的type='selection'和type='expand'来实现节点的选择和展开/收起。

然而,对于节点的拖拽排序,Element UI 本身并不直接支持。

你需要借助第三方库,比如vuedraggable,来实现这个功能。

以下是一个基本的实现示例:1.首先,你需要安装vuedraggable:bash复制代码npm installvuedraggable2.在你的组件中引入vuedraggable:javascript复制代码import draggable from'vuedraggable';3.在你的components对象中注册draggable:javascript复制代码components: {draggable}4.在你的模板中使用draggable组件包裹你的el-table-column:html复制代码<draggablev-model="list" :options="{group:'people'}"><el-table :data="list" style="width: 100%"><el-table-column type="selection"width="55"></el-table-column><el-table-column prop="name" label="Name"width="180"></el-table-column><el-table-column prop="age" label="Age"width="180"></el-table-column></el-table></draggable>在这个例子中,v-model="list"绑定了你的数据源,options对象定义了拖拽的配置。

bootstrap-table列拖动

bootstrap-table列拖动

bootstrap-table列拖动1.页⾯js/css<!-- bootstrap 插件样式 --><link th:href="@{/common/bootstrap-3.3.6/css/bootstrap.min.css}" rel="stylesheet"/><link th:href="@{/common/bootstrap-3.3.6/css/bootstrap-theme.min.css}" rel="stylesheet"/><!-- bootstrap-table 表格插件样式 --><link th:href="@{/common/bootstrap-table-1.12.2/bootstrap-table.min.css}" rel="stylesheet"/><!-- bootstarp table ⾏拖动--><link th:href="@{/common/bootstrap-table-1.12.2/extensions/reorder-rows/bootstrap-table-reorder-rows.css}" rel="stylesheet"/> <!-- bootstrap 插件 --><script th:src="@{/common/bootstrap-3.3.6/js/bootstrap.min.js}"></script><!-- bootstrap-table 表格插件 --><script th:src="@{/common/bootstrap-table-1.12.2/bootstrap-table.min.js}"></script><script th:src="@{/common/bootstrap-table-1.12.2/locale/bootstrap-table-zh-CN.min.js}"></script><!-- bootstarp table ⾏拖动--><script th:src="@{/common/TableDnD-1.0.3/dist/jquery.tablednd.1.0.3.min.js}"></script><script th:src="@{/common/bootstrap-table-1.12.2/extensions/reorder-rows/bootstrap-table-reorder-rows.js}"></script>2.页⾯定义table<div class="container-div ui-layout-center"><div class="col-sm-12 search-collapse" style="margin-top: 20px"><table id="table_sortShowNorm" data-mobile-responsive="true"></table></div></div>3.⾃定义js$(function () {initTable();});/* 初始table */function initTable() {// 初始化Tablevar oTable = new tableInit();oTable.init();}/* bootstrapTable组件初始化⽅法 */var tableInit = function () {var Obj = CommonJS.getUrlParamObject();$("#input_reportFormId").val(Obj["reportFormId"]);// $("#input_reportFormName").val(Obj["reportFormName"]);var tableVal = {};// 初始化表单数据tableVal.init = function () {var obj = CommonJS.getUrlParamObject();var tid = obj.tid;$('#table_sortShowNorm').bootstrapTable({url: ctx + "report/issueReport/customColumnsConf", // 请求后台的URL(*)undefinedText: '',// 当数据为undefined时显⽰的字符,默认是'-'toolbar: 'false', // ⼯具按钮⽤哪个容器toolbarAlign: 'false', // ⼯具按钮的位置striped: false, // 是否显⽰⾏间隔⾊queryParams: {reportFormId: $("#input_reportFormId").val()}, // 传递参数(*)pagination: false,//是否分页uniqueId: "tid", // 每⼀⾏的唯⼀标识,⼀般为主键列field: 'checked',checkbox: true,formatter: stateFormatter,showColumns: false,// 是否显⽰列的按钮reorderableRows: true, //设置拖动排序useRowAttrFunc: true, //设置拖动排序columns: [{field: 'checked',checkbox: true,formatter: stateFormatter}, {title: '序号',formatter: function (value, row, index) {return index + 1;},align: 'center'}, {field: 'name',title: '名称',align: 'center',cellStyle: {css: {"text-align": "center !important"}}}],responseHandler: function (res) {if (res.success) {$('#input_cacheId').val(res.data.tid);$('#input_modifyTime').val(res.data.modifyTime);var data = res.data.treeDto;return data;} else {CommonJS.modal.alertError(res.message);}return res;}});//判断是否是选中的function stateFormatter(value, row, index) {if (row.checked == "true") {return {disabled: false,//设置是否可⽤checked: true//设置选中};}return value;}};return tableVal;};4.点击保存传递的id$("#a_custom").on("click", function () {var name = $("#input_reportFormName").val().split("---")[0];var index1 = layer.open({type: 2, // 2|iframe层title: '【' + name + '】可显⽰列',area: ["580px", "500px"],//maxmin: true, // 最⼤化,最⼩化content: encodeURI(ctx + "report/issueReport/customColumnsView?reportFormId=" + $("#input_reportFormId").val()), btn: ['保存', '取消'],yes: function (index, layero) {var iframe = layero.find('iframe')[0].contentWindow;//获取弹框页reportFormId = iframe.$('#input_reportFormId').val();tid = iframe.$('#input_cacheId').val();modifyTime = iframe.$('#input_modifyTime').val();var ids = "";var allReportxIds = "";//获取选中的idvar rows = iframe.$("#table_sortShowNorm").bootstrapTable('getSelections');//获取所有的idvar rowsAll = iframe.$("#table_sortShowNorm").bootstrapTable('getData');for (var i = 0; i < rows.length; i++) {ids += rows[i]['id'] + ",";}ids = ids.substring(0, ids.length - 1);for (var i = 0; i < rowsAll.length; i++) {allReportxIds += rowsAll[i]['id'] + ",";}allReportxIds = allReportxIds.substring(0, allReportxIds.length - 1);$.ajax({type: "post",//⽅法类型dataType: "json",//预期服务器返回的数据类型url: encodeURI(ctx + "report/issueReport/doEditCustomColumnsConf"),//urldata: {reportFormId: reportFormId, tid: tid, modifyTime: modifyTime, allReportxIds: allReportxIds, showReportxIds: ids}, success: function (result) {//按钮【按钮⼀】的回调if (result.success) {resetScheduleLists();//layer.alert("操作成功");layer.close(index);} else {CommonJS.modal.alertError(result.message);}}});},cancel: function (index, layero) {layer.close(index);}});});5.后台接受传递的参数public class R implements Serializable {private static final long serialVersionUID = 1L;/*** 主键*/private BigDecimal tid;/*** 表格所有id*/private String allReportxIds;private String showReportxIds;/*** 选中的*/private BigDecimal reportFormId;}6.后台传前台的数据封装成List注意问题:列拖动需要设置的⼀些属性和⽅法:field: 'checked',//选中字段checkbox: true,//复选formatter: stateFormatter,reorderableRows: true, //设置拖动排序 useRowAttrFunc: true, //设置拖动排序columns: [{field: 'checked',checkbox: true,formatter: stateFormatter}]//判断是否是选中的function stateFormatter(value, row, index) { if (row.checked == "true") {return {disabled: false,//设置是否可⽤checked: true//设置选中};}return value;}。

bootstraptreetable树形网格,动态扩展,连数据库

bootstraptreetable树形网格,动态扩展,连数据库

bootstraptreetable树形⽹格,动态扩展,连数据库⼆话不说,先看看效果图:1、先来看写死的:展开前~~展开后~~怎么实现呢?先new ⼀个jsp⽂件,导⼊⼏个包,编写html代码,编写js代码,⼀个⽂件搞定!1 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>2 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "/TR/html4/loose.dtd">3 <html>4 <head>5 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">6 <title>Insert title here</title>7 <script type="text/javascript" src="../bootstrap-3.3.7-dist/treeview/jquery.js"></script>8 <script type="text/javascript" src="../js/jquery.treetable.js"></script>9 <link rel="stylesheet" type="text/css" href="../css/jquery.treetable.css">10 <link rel="stylesheet" type="text/css" href="../css/jquery.treetable.theme.default.css">11 <script type="text/javascript">12 $(document).ready(function(){13 $("#treeTable").treetable({14 expandable : true,15 initialState:"expanded",16//expandable : true17 clickableNodeNames:true,//点击节点名称也打开⼦节点.18 indent : 30//每个分⽀缩进的像素数。

ue element-table(树形结构),实现同级拖动排序

ue element-table(树形结构),实现同级拖动排序

要实现Element UI 的TreeTable 组件中的同级拖动排序,可以通过以下步骤:1. 在`el-table-column` 中添加`draggable` 属性,设置为`true`,以使该列可拖动。

2. 监听`sort-change` 事件,当拖动结束时触发。

3. 在事件处理函数中,获取拖动前后的节点信息,然后根据需要重新排序数据。

4. 更新数据后,调用`this.$mit('updateData', this.data)` 更新表格数据。

以下是一个简单的示例:```html<template><el-table:data="tableData"style="width: 100%"@sort-change="handleSortChange"><el-table-columntype="index"width="50":resizable="false":fixed="'left'"></el-table-column><el-table-columnprop="name"label="名称"width="180":resizable="false":draggable="true"></el-table-column><el-table-columnprop="age"label="年龄"width="180":resizable="false":draggable="true"></el-table-column></el-table></template><script>export default {data() {return {tableData: [{ id: 1, name: '张三', age: 18 },{ id: 2, name: '李四', age: 20 },{ id: 3, name: '王五', age: 22 },],};},methods: {handleSortChange({ column, prop, order }) {const newData = JSON.parse(JSON.stringify(this.tableData));const startIndex = newData.findIndex((item) => item.id === parseInt(column.property));const endIndex = newData.findIndex((item) => item.id === parseInt(prop));if (order === 'ascending') {newData.splice(startIndex, 0, newData.splice(endIndex, 1)[0]);} else {newData.splice(endIndex, 0, newData.splice(startIndex, 1)[0]);}this.$mit('updateData', newData);},},};</script>```这个示例中,我们创建了一个包含三个列(索引、名称和年龄)的表格。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Bootstrap学习笔记之Nestable可拖拽树结构
Nestable是基于Bootstrap的一个可拖拽的树结构表现插件。

下面粗略的介绍一下它的用法,只作为学习参考,如有不合适之处,请各位凑合看。

1.首先是需要引入的文件
∙bootstrap.min.css Bootstrap的CSS文件
∙font-awesome.min.css 这个是Bootstrap的一个图标和字体的插件,Nestable应该用了它的一些图标,如果不引入这个文件有可能图标不能显示出来。

∙ace.min.css 这个一直不知道是什么,没来得及查阅资料,有知道的请告知一下
∙jquery-2.0.3.min.js 这个不解释
∙bootstrap.min.js 同上
∙jquery.nestable.min.js 这是就是今天介绍的主体
∙以上文件我会统一放在附件里面
∙ 2.下面是一个示例
∙HTML:
∙<div class="dd"> <ol class="dd-list"> <li
class="dd-item" data-id="1"> <div
class="dd-handle">Item 1</div> </li> <li
class="dd-item" data-id="2"> <div
class="dd-handle">Item 2</div> </li> <li
class="dd-item" data-id="3"> <div
class="dd-handle">Item 3</div> <ol
class="dd-list"> <li class="dd-item"
data-id="4"> <div
class="dd-handle">Item 4</div> </li> ∙在head标签内加入
∙<script type="text/javascript"> jQuery(function() {
$('.dd'
3.事件Events
当重新排序后触发
$('.dd').on('change', function() {/* on change event */});
4.方法Methods
将页面显示的树结构序列化
$('.dd').nestable('serialize');
按开头的例子序列化返回的JSON数据应该是
[{"id":1},{"id":2},{"id":3,"children":[{"id":4},{"id":5}]}] 5.配置Configuration
$('.dd').nestable({ /* config options */ });
可配置项:
∙maxDepth 树节点层次(默认5)
∙group 允许在列表之间拖动的组ID(默认0)
∙listNodeName 创建树结构的的HTML标签(默认'ol')
∙itemNodeName 创建树结构节点的HTML标签(默认'li')
∙rootClass 根节点的class属性名称(默认'dd')
∙listClass 所有节点的class属性名称(默认'dd-list')
∙itemClass 树结构叶子节点class名称(默认'dd-item')
∙dragClass
∙handleClass
∙collapsedClass
∙placeClass
∙emptyClass
∙expandBtnHTML
∙collapseBtnHTML。

相关文档
最新文档