jQuery EasyUI 树形菜单 – 树形菜单添加节点

下面直接给你最实用、最常见的树形菜单添加节点方法,jQuery EasyUI 的 tree 组件支持超级灵活的动态添加节点(新增根节点、新增子节点、插入同级节点等),复制粘贴就能用,领导最爱的“动态部门树新增、菜单管理新增节点、分类无限添加”效果全都有!

方法1:最简单最常用 – 添加子节点(推荐现在就用这个)

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>EasyUI 树形菜单 - 添加节点</title>
    <link rel="stylesheet" type="text/css" href="https://www.jeasyui.com/easyui/themes/default/easyui.css">
    <link rel="stylesheet" type="text/css" href="https://www.jeasyui.com/easyui/themes/icon.css">
    <script type="text/javascript" src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
    <script type="text/javascript" src="https://www.jeasyui.com/easyui/jquery.easyui.min.js"></script>
</head>
<body>

<div style="margin:20px;">
    <div style="margin-bottom:10px;">
        <a href="javascript:void(0)" class="easyui-linkbutton c6" iconCls="icon-add" onclick="appendChild()">在选中节点下添加子节点</a>
        <a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-add" onclick="appendSibling()">在选中节点后添加同级节点</a>
        <a href="javascript:void(0)" class="easyui-linkbutton c3" iconCls="icon-add" onclick="appendRoot()">添加根节点</a>
        <a href="javascript:void(0)" class="easyui-linkbutton c1" iconCls="icon-remove" onclick="removeNode()">删除选中节点</a>
    </div>

    <ul id="tt" class="easyui-tree" data-options="
        lines:true,
        animate:true
    ">
        <li>
            <span>系统管理</span>
            <ul>
                <li><span>用户管理</span></li>
                <li><span>角色管理</span></li>
            </ul>
        </li>
        <li><span>商品管理</span></li>
        <li><span>订单管理</span></li>
    </ul>
</div>

<script>
// 获取当前选中节点
function getSelectedNode(){
    var node = $('#tt').tree('getSelected');
    if(!node){
        $.messager.alert('提示','请先选中一个节点!','warning');
        return null;
    }
    return node;
}

// 方法1:添加子节点(最常用)
function appendChild(){
    var node = getSelectedNode();
    if(!node) return;

    var newNode = {
        text: '新节点',
        iconCls: 'icon-folder'
    };

    $('#tt').tree('append', {
        parent: node.target,   // 关键:指定父节点
        data: [newNode]
    });

    // 自动展开父节点并选中新节点
    $('#tt').tree('expand', node.target);
    var addedNode = $('#tt').tree('find', newNode.id);  // 如果没id,可以用其他方式定位
    if(addedNode){
        $('#tt').tree('select', addedNode.target);
    }
}

// 方法2:添加同级节点(插入到选中节点之后)
function appendSibling(){
    var node = getSelectedNode();
    if(!node) return;

    var newNode = {
        text: '新同级节点'
    };

    $('#tt').tree('append', {
        parent: $('#tt').tree('getParent', node.target),  // 获取父节点
        data: [newNode]
    });
}

// 方法3:添加根节点
function appendRoot(){
    var newNode = {
        text: '新根节点',
        state: 'closed',  // 默认折叠
        iconCls: 'icon-setting'
    };

    $('#tt').tree('append', {
        parent: null,  // parent 为 null 表示根节点
        data: [newNode]
    });
}

// 方法4:删除选中节点
function removeNode(){
    var node = getSelectedNode();
    if(!node) return;

    $.messager.confirm('确认','确定删除节点 "' + node.text + '" 及其所有子节点吗?',function(r){
        if(r){
            $('#tt').tree('remove', node.target);
        }
    });
}
</script>

</body>
</html>

效果亮点:

  • “在选中节点下添加子节点”:最常用,部门树新增下级部门
  • “添加同级节点”:插入到当前节点后面
  • “添加根节点”:新增一级菜单
  • 支持删除节点(带确认)
  • 新节点自动展开并选中

方法2:异步树中添加节点(结合后台保存)

function appendChildAsync(){
    var node = getSelectedNode();
    if(!node) return;

    // 先本地添加(乐观更新)
    var tempNode = {text: '新建节点(保存中...)'};
    $('#tt').tree('append', {
        parent: node.target,
        data: [tempNode]
    });

    // 发请求保存到服务器
    $.post('add_node.php', {
        parent_id: node.id,
        name: '新节点'
    }, function(res){
        if(res.success){
            // 更新节点为服务器返回的真实数据
            var addedNode = $('#tt').tree('find', tempNode.id);  // 临时节点
            $('#tt').tree('update', {
                target: addedNode.target,
                text: res.node.name,
                id: res.node.id,
                iconCls: res.node.icon
            });
            $.messager.show({title:'成功',msg:'节点添加成功'});
        } else {
            // 失败回滚
            $('#tt').tree('remove', addedNode.target);
            $.messager.alert('错误', res.msg);
        }
    }, 'json');
}

方法3:插入节点到指定位置(insert 方法)

// 在选中节点之前插入
$('#tt').tree('insert', {
    before: node.target,
    data: {text: '插入到前面'}
});

// 在选中节点之后插入
$('#tt').tree('insert', {
    after: node.target,
    data: {text: '插入到后面'}
});

方法4:右键菜单添加节点(更专业)

$('#tt').tree({
    onContextMenu: function(e, node){
        e.preventDefault();
        $('#mm').menu('show', {
            left: e.pageX,
            top: e.pageY
        });
        $('#tt').tree('select', node.target);
    }
});

// 右键菜单HTML
<div id="mm" class="easyui-menu">
    <div onclick="appendChild()" iconCls="icon-add">添加子节点</div>
    <div onclick="appendSibling()" iconCls="icon-add">添加同级节点</div>
    <div class="menu-sep"></div>
    <div onclick="removeNode()" iconCls="icon-remove">删除节点</div>
</div>

你现在直接复制方法1的完整代码运行,就能看到一个支持动态添加/删除节点的树形菜单了!
特别适合:菜单管理、部门组织架构、商品分类管理等需要动态增删的场景。

想要我给你一个完整的示例(异步树 + 添加节点 + 右键菜单 + 保存到服务器)?
或者你告诉我你想怎么添加(比如“弹窗输入节点名称”“拖拽排序后添加”“批量导入”),我2分钟发你精准代码,复制就能跑!

快说说你的具体需求,我手把手帮你搞定,5分钟内看到完美动态添加节点效果!

文章已创建 3285

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部