jsTree设置父子级联选择后实现

问题:使用jsTree对用户进行菜单赋权的功能。在对某一用户仅赋权一个菜单下的部分模块功能后,单击此用户将模块树展现出来并将有权限的模块结点(ajax获取)选中。

加载选中模块时节点时出现了问题即对某一父模块节点进行checked操作时会默认将下面的所有子模块节点选中,无论有没有被赋权。这样就将没有赋权的模块结点也选上了(即左图效果)。

很明显是不对的,我想要的是仅将被赋权的模块结点选中,若一个模块节点下的子模块节点未全部赋权则该模块节点呈现半选中的状态(即右图的效果)。

图2  图2

这是由于设置了父子级联的问题,但是父子级联的功能又不能去掉。

思索一番后找到一个比较笨的方法:先实现左图的效果,然后将已选中的结点和后台传来有权限的结点数据作对比,找出没权限的结点后做unchecked操作。

即在原来的基础上增加取消选中的操作。

$.ajax({
    type: 'get',
    url: "/Module/UserModuleJson",
    data: { UserID: userID },
    cache: false,
    success: function (data) {
        $("#moduleTree").jstree(true).uncheck_all();
        $("#moduleTree").jstree('check_node', data);
        //以下代码为在原来的基础上增加的取消结点选中操作
        var ids = [];
        $.each($("#moduleTree").jstree(true).get_checked(true), function (index, item) {
            ids.push(item.id);
            var IsCheck = false;
            $.each(data, function (i, id) {
                if (item.id == id) {
                    IsCheck = true;
                }
            });
            if (IsCheck == false) {
            $('#moduleTree').jstree('uncheck_node', item.id);
            }
        });
    }
});

最后此方法在循环内套了循环加判断仅适合数据量不大的情况下。

若哪位大神有更好的方法请评论指点,或者我主动联系您!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值