jquery中EasyUI实现同步树

实现同步树需借助EasyUI Tree组件的loadFilter属性与远程数据源,以下是详细的攻略:

步骤一:引入依赖

在页面中引入jQuery、jQuery EasyUI和所需的主题样式:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>jQuery EasyUI同步树</title>
    <link rel="stylesheet" type="text/css" href="https://cdn.bootcdn.net/ajax/libs/jquery/1.10.2/jquery.min.js">
    <link rel="stylesheet" type="text/css" href="https://cdn.bootcdn.net/ajax/libs/jquery-easyui/1.10.5/themes/bootstrap/easyui.css">
    <link rel="stylesheet" type="text/css" href="https://cdn.bootcdn.net/ajax/libs/jquery-easyui/1.10.5/themes/icon.css">
    <script type="text/javascript" src="https://cdn.bootcdn.net/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
    <script type="text/javascript" src="https://cdn.bootcdn.net/ajax/libs/jquery-easyui/1.10.5/jquery.easyui.min.js"></script>
</head>
<body>
    <div id="tt"></div>
</body>
</html>

步骤二:书写远程数据源

定义一个名为"data.json"的Json文件,并书写数据源,如下所示:

[
    {
        "id": 1,
        "text": "节点1",
        "parentId": null
    },
    {
        "id": 2,
        "text": "节点2",
        "parentId": null
    },
    {
        "id": 3,
        "text": "节点1-1",
        "parentId": 1
    },
    {
        "id": 4,
        "text": "节点1-2",
        "parentId": 1
    },
    {
        "id": 5,
        "text": "节点2-1",
        "parentId": 2
    },
    {
        "id": 6,
        "text": "节点2-2",
        "parentId": 2
    }
]

步骤三:加载数据

在EasyUI Tree组件中使用loadFilter属性进行数据处理,并通过url属性加载远程数据:

$('#tt').tree({
    url: 'data.json',
    method: 'get',
    loadFilter: function(data, parent){
        var opt = $(this).data().tree.options;
        var idField, textField, parentField;
        if (opt.parentField){
            idField = opt.idField || 'id';
            textField = opt.textField || 'text';
            parentField = opt.parentField;
            for(var i =0;i<data.length;i++){
                data[i].id = data[i][idField];
                data[i].text = data[i][textField];
                if (data[i][parentField]){
                    data[i]['_parentId'] = data[i][parentField];
                }
            }
            var treeData = [];
            for(var i=0;i<data.length;i++){
                var parentId = data[i]['_parentId'];
                if (!parentId){
                    treeData.push(data[i]);
                } else {
                    var parent = findParent(treeData,parentId);
                    if (parent.children){
                        parent.children.push(data[i]);
                    } else {
                        parent.children = [data[i]];
                    }
                }
            }
            return treeData;
        }
        return data;

        function findParent(data,parentId){
            for(var i=0;i<data.length;i++){
                if (data[i].id == parentId){
                    return data[i];
                } else if (data[i].children){
                    var res = findParent(data[i].children,parentId);
                    if (res){
                        return res;
                    }
                }
            }
            return null;
        }
    },
    animate: true,
    lines: true,
    dnd: true,
    onClick: function(node){
        console.log(node);
    }
})

示例一:基础同步树

在页面上实现一个基础的同步树,基础版同步树如下:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>jQuery EasyUI同步树</title>
    <link rel="stylesheet" type="text/css" href="https://cdn.bootcdn.net/ajax/libs/jquery/1.10.2/jquery.min.js">
    <link rel="stylesheet" type="text/css" href="https://cdn.bootcdn.net/ajax/libs/jquery-easyui/1.10.5/themes/bootstrap/easyui.css">
    <link rel="stylesheet" type="text/css" href="https://cdn.bootcdn.net/ajax/libs/jquery-easyui/1.10.5/themes/icon.css">
    <script type="text/javascript" src="https://cdn.bootcdn.net/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
    <script type="text/javascript" src="https://cdn.bootcdn.net/ajax/libs/jquery-easyui/1.10.5/jquery.easyui.min.js"></script>
</head>
<body>
    <div id="tt"></div>
    <script type="text/javascript">
        $('#tt').tree({
            url: 'data.json',
            method: 'get',
            loadFilter: function(data, parent){
                var opt = $(this).data().tree.options;
                var idField, textField, parentField;
                if (opt.parentField){
                    idField = opt.idField || 'id';
                    textField = opt.textField || 'text';
                    parentField = opt.parentField;
                    for(var i =0;i<data.length;i++){
                        data[i].id = data[i][idField];
                        data[i].text = data[i][textField];
                        if (data[i][parentField]){
                            data[i]['_parentId'] = data[i][parentField];
                        }
                    }
                    var treeData = [];
                    for(var i=0;i<data.length;i++){
                        var parentId = data[i]['_parentId'];
                        if (!parentId){
                            treeData.push(data[i]);
                        } else {
                            var parent = findParent(treeData,parentId);
                            if (parent.children){
                                parent.children.push(data[i]);
                            } else {
                                parent.children = [data[i]];
                            }
                        }
                    }
                    return treeData;
                }
                return data;

                function findParent(data,parentId){
                    for(var i=0;i<data.length;i++){
                        if (data[i].id == parentId){
                            return data[i];
                        } else if (data[i].children){
                            var res = findParent(data[i].children,parentId);
                            if (res){
                                return res;
                            }
                        }
                    }
                    return null;
                }
            },
            animate: true,
            lines: true,
            dnd: true,
            onClick: function(node){
                console.log(node);
            }
        })
    </script>
</body>
</html>

示例二:多级同步树

在基础同步树之上,增加多层级的子树,可以通过在数据源中定义“parentId”属性实现:

[
    {
        "id": 1,
        "text": "节点1",
        "parentId": null
    },
    {
        "id": 2,
        "text": "节点2",
        "parentId": null
    },
    {
        "id": 3,
        "text": "节点1-1",
        "parentId": 1
    },
    {
        "id": 4,
        "text": "节点1-2",
        "parentId": 1
    },
    {
        "id": 5,
        "text": "节点2-1",
        "parentId": 2
    },
    {
        "id": 6,
        "text": "节点2-2",
        "parentId": 2
    },
    {
        "id": 7,
        "text": "节点1-1-1",
        "parentId": 3
    },
    {
        "id": 8,
        "text": "节点1-1-2",
        "parentId": 3
    }
]

多层级同步树如下:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>jQuery EasyUI同步树</title>
    <link rel="stylesheet" type="text/css" href="https://cdn.bootcdn.net/ajax/libs/jquery/1.10.2/jquery.min.js">
    <link rel="stylesheet" type="text/css" href="https://cdn.bootcdn.net/ajax/libs/jquery-easyui/1.10.5/themes/bootstrap/easyui.css">
    <link rel="stylesheet" type="text/css" href="https://cdn.bootcdn.net/ajax/libs/jquery-easyui/1.10.5/themes/icon.css">
    <script type="text/javascript" src="https://cdn.bootcdn.net/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
    <script type="text/javascript" src="https://cdn.bootcdn.net/ajax/libs/jquery-easyui/1.10.5/jquery.easyui.min.js"></script>
</head>
<body>
    <div id="tt"></div>
    <script type="text/javascript">
        $('#tt').tree({
            url: 'data.json',
            method: 'get',
            loadFilter: function(data, parent){
                var opt = $(this).data().tree.options;
                var idField, textField, parentField;
                if (opt.parentField){
                    idField = opt.idField || 'id';
                    textField = opt.textField || 'text';
                    parentField = opt.parentField;
                    for(var i =0;i<data.length;i++){
                        data[i].id = data[i][idField];
                        data[i].text = data[i][textField];
                        if (data[i][parentField]){
                            data[i]['_parentId'] = data[i][parentField];
                        }
                    }
                    var treeData = [];
                    for(var i=0;i<data.length;i++){
                        var parentId = data[i]['_parentId'];
                        if (!parentId){
                            treeData.push(data[i]);
                        } else {
                            var parent = findParent(treeData,parentId);
                            if (parent.children){
                                parent.children.push(data[i]);
                            } else {
                                parent.children = [data[i]];
                            }
                        }
                    }
                    return treeData;
                }
                return data;

                function findParent(data,parentId){
                    for(var i=0;i<data.length;i++){
                        if (data[i].id == parentId){
                            return data[i];
                        } else if (data[i].children){
                            var res = findParent(data[i].children,parentId);
                            if (res){
                                return res;
                            }
                        }
                    }
                    return null;
                }
            },
            animate: true,
            lines: true,
            dnd: true,
            onClick: function(node){
                console.log(node);
            }
        })
    </script>
</body>
</html>

以上是jquery中EasyUI实现同步树的完整攻略,两个示例均实现简单同步树和多级同步树。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:jquery中EasyUI实现同步树 - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • jquery UI 1.72 之datepicker

    下面是关于jquery UI 1.72之datepicker的完整攻略: 介绍 jquery UI 1.72是一款基于jquery的UI组件库,其中包含了丰富的UI组件,包括日期选择器(datepicker)。datepicker组件可以方便地让用户选择日期,支持各种格式和语言,也可自定义样式。接下来,我们来详细了解如何使用datepicker。 安装 使用…

    jquery 2023年5月28日
    00
  • webpack external模块的具体使用

    Webpack是一个基于模块化开发的前端打包工具。在webpack的配置中,external模块可以用于避免把某个不常用且较大的库打包进bundle.js中,而是在运行时从外部引入。这样做可以减小打包文件的体积,并且可以在多个应用中共享同一个库依赖。 配置 在webpack的配置文件中,我们可以通过配置externals选项来指定哪些模块应该从外部获取。该选…

    jquery 2023年5月27日
    00
  • jQWidgets jqxTree getItems()方法

    以下是关于 jQWidgets jqxTree 组件中 getItems() 方法的详细攻略。 jQWidgets jqxTree getItems() 方法 getItems() 方法用于获取 jQWidgets jqxTree 组件中的所有节点元素或节点数据。该方法将返回一个数组,其中包含所有节点元素或节点数据。 语法 var items = $(‘#t…

    jquery 2023年5月11日
    00
  • jQuery UI对话框close()方法

    以下是关于 jQuery UI 的对话框 close() 方法的完整攻略: jQuery UI 的对话框 close() 方法 在 jQuery UI 中,可以使用 dialog() 方法创建一个对话框。close() 方法可以关闭对话框。 语法 $(selector).dialog("close"); 其中,selector 是要应用 …

    jquery 2023年5月11日
    00
  • ajax session过期问题的几个解决方案

    下面我来为您详细讲解“ajax session过期问题的几个解决方案”的完整攻略。 什么是ajax session过期问题 在AJAX调用服务器端的时候,我们需要向服务器端传递session id,如果服务器端的session信息已经过期,那么就会导致访问出现问题,我们称之为“ajax session过期问题”。 解决方案: 方案一:在AJAX中加入time…

    jquery 2023年5月27日
    00
  • 如何用jQuery防止Body在打开模态时滚动

    当打开模态框时,为了让用户在交互时更加专注,我们通常会禁止页面滚动。这时,可以使用jQuery对body元素进行操作来实现禁止滚动的效果。下面,我将分享如何用jQuery防止Body在打开模态时滚动的攻略。 步骤一:阻止默认事件 为了禁止body滚动,我们需要阻止浏览器在滚动时的默认事件。我们可以在打开模态框的同时,给body元素添加加阻止默认事件的CSS样…

    jquery 2023年5月12日
    00
  • jQuery extend()方法

    jQuery extend()方法用于将一个或多个对象的内容合并到目标对象中。本文将详细介绍extend()方法的语法用法,并提供两个示例说明。 语法 以下是extend()方法的基本语法: $.extend(target, object1 object2, …) 在这个语法中,target是目标对象,object1、object2等是要合并到目标对象中…

    jquery 2023年5月9日
    00
  • jQWidgets jqxRangeSelector snapToTicks属性

    首先讲解一下jQWidgets和jqxRangeSelector是什么: jQWidgets是一个基于jQuery的UI组件库,提供了各种各样的UI控件,例如表格、树形菜单、图表、日历等等。 jqxRangeSelector是jQWidgets提供的其中一种UI控件,主要用于指定一段范围,例如时间范围选择器。 jqxRangeSelector的snapToT…

    jquery 2023年5月11日
    00
合作推广
合作推广
分享本页
返回顶部