需求:
① 给定一个数组
② 数组中的每个元素均为树结构上的一个节点
③ 除root节点外,其他每个结点,均有一个字段,用于记录直接父节点的id
④ root节点以下的每个层次中,节点的数量不限
树结构如下图:
⑤ 要求实现: 将上述树状图中的每个节点作成下拉框中的一个option供用户进行选择,效果图如下:
实现代码:
/** * build all department options * * @param allDept * all department info */ function buildDept(allDept) { var res = ""; var idx; var rootDept = null; // find the root department for (idx = 0; idx < allDept.length; idx++) { if (allDept[idx].parent == null) { rootDept = allDept[idx]; break; } } // if the root department was found if (rootDept) { res += "<option value='" + rootDept.id + "'>" + rootDept.name + "</option>"; var loopedId = []; loopedId[loopedId.length] = rootDept.id; (function(node, level) { var idx; var deptTmp; for (idx = 0; idx < allDept.length; idx++) { deptTmp = allDept[idx]; if ($.inArray(deptTmp.id, loopedId) == -1) { if (deptTmp.parent.id == node.id) { loopedId[loopedId.length] = deptTmp.id; res += createDeptOption(deptTmp, level); arguments.callee(deptTmp, (level + 1)); } } } })(rootDept, 1); } return res; }
/** * create a option for a department * * @param node * a department node * @param level * the department level */ function createDeptOption(node, level) { var prefix = "|"; var sep = "-"; var option = "<option value='" + node.id + "'>" + prefix; var idx; for (idx = 0; idx < (2 * level - 1); idx++) { option += sep; } option += node.name + "</option>"; return option; }
重点是上面第一个方法,我简要说明一下:
① 找出唯一的那个root节点。即没有父节点的那个节点。通过“allDept[idx].parent == null”来判断即可。
② 从root结点开始,往叶子节点方向,递归查找每个节点。注意一下“ arguments.callee(deptTmp, (level + 1));”的用法,这个是关键。
PS:我这里使用了一个 loopedId 数组来将所有已经遍历过的储存起来,下次循环的时候,先判断一下有没有被遍历过,如果有的话,则跳过。 但是我觉得这个方法有点笨拙,可我一时又想不到其他方法。如果有哪位兄弟有好的解决方案的话,可以留一下言,谢谢!
以上只是拼凑 所有 option 的过程,要想放到某个select中的话,可以直接使用 JQuery 的 append 方法来实现,如: $("#selectID").append(str);
相关推荐
在下拉框中使用树状结构,可以将数据按照层级关系呈现,比如部门-小组-员工的组织结构,或者国家-省份-城市的地理结构,便于用户按层次进行选择。 3. **搜索过滤**:搜索过滤是UI设计中的一个重要功能,允许用户...
zTree就是用来处理这种数据结构的工具,它可以将复杂的层级数据转换为易于浏览和操作的树状视图。 接下来是"多选框"和"单选框"。在zTree中,用户可以选择一个或多个节点。如果配置为多选模式,用户可以勾选多个节点...
这个修改版的下拉框树形菜单可能是在原生的Bootstrap下拉组件基础上进行了定制,增加了对树状数据的支持,允许用户在下拉菜单中选择一个或多个树节点。 要实现这样的功能,你需要完成以下步骤: 1. **引入依赖**:...
当需要处理具有树状结构的数据时,如部门结构、地区分类等,就需要对其进行定制,将其下拉部分转换为一个Tree组件,这就是所谓的"Flex下拉框为Tree的ComboBox"。 首先,我们来看一下如何实现这个功能。在Flex中,...
这样,我们可以将服务器端生成的树状数据结构以JSON格式发送到前端,然后利用jQuery EasyUI将其转换为可视化的树形结构。 实现这个功能的步骤大致如下: 1. 创建HTML结构:使用`<div>`模拟下拉框,`<ul>`和`<li>`...
在Flex编程环境中,"带复选框的树状ComboBox"是一种高级UI组件,它结合了树形结构和下拉框的功能,并且每个节点都配备有复选框,为用户提供了一种方便的方式来多选树状数据。这样的组件在数据筛选、配置设置等场景中...
这款插件极大地提升了用户在交互界面中的选择体验,尤其适用于需要用户从大量选项中进行选择的情况。接下来,我们将详细讨论这个插件的关键知识点。 1. **基本使用** Bootstrap Multiselect的使用首先需要引入...
在Silverlight中,我们可能有一个树形下拉控件,它可能利用了DataTemplate和VisualTree来呈现树状结构。要将其转换为WPF,我们需要遵循以下步骤: 1. **控件模板**:在WPF中,我们可以使用ControlTemplate来定义...
首先,"jQuery树形插件下拉列表选择框"是一种创新的UI设计,它将传统的下拉列表与树形结构相结合,使用户可以在层级关系清晰的选项中进行选择。这种设计尤其适用于有组织结构的数据展示,如目录、组织架构或分类等。...
首先,`treeview`插件是一种将层级数据结构转换为可交互的树形视图的工具。在网页中,它可以用于展示文件系统、目录结构、组织架构或者任何有层次关系的数据。通过这个插件,用户可以展开和折叠节点,轻松地浏览和...
7. **jquery.treeview**:这是jQuery的一个插件,用于将普通的HTML列表转换为树状视图。尽管主要目的是创建可折叠的导航菜单,但经过适当的定制,也能实现下拉多选框的效果。 8. **jquery-textext**:这是一个...
10.树状结构可以选择出现在某一列,不一定要在第一列 11.支持theme,纯css定制表格树,可以自由定制theme,包括图标/节点大小等 12.表格树从右到左显示 13.本地节点搜索,服务器端节点搜索(未实现待完成) 14.无变化重新...
- **初始化**:加载页面后,JavaScript会读取HTML中的结构数据,创建树状结构,并将其转换为下拉树。 - **事件绑定**:为各个节点绑定点击事件,当用户点击节点时,记录选中状态,更新下拉框文本,并可能触发其他...
可以使用像jQuery这样的库来简化跨浏览器的兼容问题,或者使用Babel等工具将ES6+的语法转换为更广泛的浏览器支持的ES5语法。 9. **用户体验**:除了功能实现,还需要关注用户体验,如加载提示、错误处理、可访问性...
1. **层级展示**:能够将扁平化的数据结构转换为多级列表,每个节点可以有子节点,形成树状结构。 2. **可折叠/展开**:允许用户点击节点来隐藏或显示其子节点,以便更好地管理屏幕空间。 3. **动态加载**:对于...
首先,"树型框"(Tree View)是一种可扩展的视图控件,它以树状结构显示数据,常用于表示层次关系的信息。每个节点可以有子节点,用户可以通过展开和折叠节点来查看或隐藏子项。在Windows编程中,如使用Microsoft ...
例如,用户在选择省份后,下拉框会自动更新为对应省份的城市选项,然后再是区县。这极大地提高了用户体验,简化了开发工作。 为了有效地使用这个`address2021.json`文件,你需要: 1. 将文件加载到你的前端项目中,...
树形下拉列表是一种在用户界面中常见的交互元素,它结合了传统的下拉列表和树状结构的特点,常用于展示层级关系的数据。在Web开发中,实现这样的功能通常需要前端和后端的协同工作。本篇文章将重点讲解如何通过递归...
树状结构可以选择出现在某一列,不一定要在第一列 11.支持theme,纯css定制表格树,可以自由定制theme,包括图标/节点大小等 12.表格树从右到左显示 13.本地节点搜索,服务器端节点搜索(未实现待完成) 14.无变化...
在IT领域,C++ GUI(图形用户界面)是一种常见的技术,用于构建具有视觉元素的应用程序,使得用户可以通过点击按钮、选择菜单项等直观方式进行交互。本教程将详细讲解如何使用C++来创建GUI应用程序,搭建可视化编程...