`
Rainbow702
  • 浏览: 1076712 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类

将树状结构转换为下拉框,供用户进行选择

阅读更多

需求:

① 给定一个数组

② 数组中的每个元素均为树结构上的一个节点

③ 除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);

  • 大小: 35.4 KB
  • 大小: 20.6 KB
分享到:
评论

相关推荐

    下拉框树状带搜索过滤

    在下拉框中使用树状结构,可以将数据按照层级关系呈现,比如部门-小组-员工的组织结构,或者国家-省份-城市的地理结构,便于用户按层次进行选择。 3. **搜索过滤**:搜索过滤是UI设计中的一个重要功能,允许用户...

    结合ztree的下拉框树形结构数据多选,单选

    zTree就是用来处理这种数据结构的工具,它可以将复杂的层级数据转换为易于浏览和操作的树状视图。 接下来是"多选框"和"单选框"。在zTree中,用户可以选择一个或多个节点。如果配置为多选模式,用户可以勾选多个节点...

    bootstrap树形下拉框 下拉框树形菜单(修改版)

    这个修改版的下拉框树形菜单可能是在原生的Bootstrap下拉组件基础上进行了定制,增加了对树状数据的支持,允许用户在下拉菜单中选择一个或多个树节点。 要实现这样的功能,你需要完成以下步骤: 1. **引入依赖**:...

    Flex 下拉框为Tree的ComboBox

    当需要处理具有树状结构的数据时,如部门结构、地区分类等,就需要对其进行定制,将其下拉部分转换为一个Tree组件,这就是所谓的"Flex下拉框为Tree的ComboBox"。 首先,我们来看一下如何实现这个功能。在Flex中,...

    下拉框下面生成tree树

    这样,我们可以将服务器端生成的树状数据结构以JSON格式发送到前端,然后利用jQuery EasyUI将其转换为可视化的树形结构。 实现这个功能的步骤大致如下: 1. 创建HTML结构:使用`&lt;div&gt;`模拟下拉框,`&lt;ul&gt;`和`&lt;li&gt;`...

    带复选框的树状ComboBox

    在Flex编程环境中,"带复选框的树状ComboBox"是一种高级UI组件,它结合了树形结构和下拉框的功能,并且每个节点都配备有复选框,为用户提供了一种方便的方式来多选树状数据。这样的组件在数据筛选、配置设置等场景中...

    bootstrap-multiselect下拉框多选单选条件筛选

    这款插件极大地提升了用户在交互界面中的选择体验,尤其适用于需要用户从大量选项中进行选择的情况。接下来,我们将详细讨论这个插件的关键知识点。 1. **基本使用** Bootstrap Multiselect的使用首先需要引入...

    wpf_combobox_tree下拉树形控件

    在Silverlight中,我们可能有一个树形下拉控件,它可能利用了DataTemplate和VisualTree来呈现树状结构。要将其转换为WPF,我们需要遵循以下步骤: 1. **控件模板**:在WPF中,我们可以使用ControlTemplate来定义...

    jQuery树形插件下拉列表选择框.zip

    首先,"jQuery树形插件下拉列表选择框"是一种创新的UI设计,它将传统的下拉列表与树形结构相结合,使用户可以在层级关系清晰的选项中进行选择。这种设计尤其适用于有组织结构的数据展示,如目录、组织架构或分类等。...

    3个简单的JQUERY插件

    首先,`treeview`插件是一种将层级数据结构转换为可交互的树形视图的工具。在网页中,它可以用于展示文件系统、目录结构、组织架构或者任何有层次关系的数据。通过这个插件,用户可以展开和折叠节点,轻松地浏览和...

    11款下拉式多选框

    7. **jquery.treeview**:这是jQuery的一个插件,用于将普通的HTML列表转换为树状视图。尽管主要目的是创建可折叠的导航菜单,但经过适当的定制,也能实现下拉多选框的效果。 8. **jquery-textext**:这是一个...

    树形表格菜单 动态添加节点/动态删除节点/动态移动节点

    10.树状结构可以选择出现在某一列,不一定要在第一列 11.支持theme,纯css定制表格树,可以自由定制theme,包括图标/节点大小等 12.表格树从右到左显示 13.本地节点搜索,服务器端节点搜索(未实现待完成) 14.无变化重新...

    下拉树 dtree.rar

    - **初始化**:加载页面后,JavaScript会读取HTML中的结构数据,创建树状结构,并将其转换为下拉树。 - **事件绑定**:为各个节点绑定点击事件,当用户点击节点时,记录选中状态,更新下拉框文本,并可能触发其他...

    纯JS省市区联动 省市级联

    可以使用像jQuery这样的库来简化跨浏览器的兼容问题,或者使用Babel等工具将ES6+的语法转换为更广泛的浏览器支持的ES5语法。 9. **用户体验**:除了功能实现,还需要关注用户体验,如加载提示、错误处理、可访问性...

    基于bootstrup的jQuery多级列表树插件

    1. **层级展示**:能够将扁平化的数据结构转换为多级列表,每个节点可以有子节点,形成树状结构。 2. **可折叠/展开**:允许用户点击节点来隐藏或显示其子节点,以便更好地管理屏幕空间。 3. **动态加载**:对于...

    树型框内容转到组合框

    首先,"树型框"(Tree View)是一种可扩展的视图控件,它以树状结构显示数据,常用于表示层次关系的信息。每个节点可以有子节点,用户可以通过展开和折叠节点来查看或隐藏子项。在Windows编程中,如使用Microsoft ...

    树结构全国三级地址json数据

    例如,用户在选择省份后,下拉框会自动更新为对应省份的城市选项,然后再是区县。这极大地提高了用户体验,简化了开发工作。 为了有效地使用这个`address2021.json`文件,你需要: 1. 将文件加载到你的前端项目中,...

    树形下拉列表 递归实现

    树形下拉列表是一种在用户界面中常见的交互元素,它结合了传统的下拉列表和树状结构的特点,常用于展示层级关系的数据。在Web开发中,实现这样的功能通常需要前端和后端的协同工作。本篇文章将重点讲解如何通过递归...

    Tabletree4j Version 2

    树状结构可以选择出现在某一列,不一定要在第一列  11.支持theme,纯css定制表格树,可以自由定制theme,包括图标/节点大小等  12.表格树从右到左显示  13.本地节点搜索,服务器端节点搜索(未实现待完成)  14.无变化...

    gui_C++_GUI_

    在IT领域,C++ GUI(图形用户界面)是一种常见的技术,用于构建具有视觉元素的应用程序,使得用户可以通过点击按钮、选择菜单项等直观方式进行交互。本教程将详细讲解如何使用C++来创建GUI应用程序,搭建可视化编程...

Global site tag (gtag.js) - Google Analytics