首页 新闻 会员 周边 捐助

jstree(jsTree.v.1.0rc) 三级树形,如何获取默认状态下的子节点Id

0
悬赏园豆:50 [已关闭问题] 关闭于 2014-04-17 14:54

第一个问题:如何获取默认状态下的子节点Id

 

第二个问题:默认选择子节点的时,让父类出现半勾状态。这个方法怎么写

 

麻烦高手们,帮帮忙。如果有好的方法跟我联系下:415859076 谢谢!

问题补充:

    也许我描述的不太清楚,我自己写了一个测试项目与真实项目报错一样的列子。百度网盘下载地址:http://pan.baidu.com/share/link?shareid=4279454005&uk=3744480727

没有多太。麻烦高手们有时间,有时间帮我看看。。谢谢!

KenyonLi的主页 KenyonLi | 初学一级 | 园豆:165
提问于:2013-07-25 20:43
< >
分享
所有回答(2)
0

一.这里我不知道你说的默认子节点的ID是什么意思,下面的代码是当你点击该节点是,获得该节点的ID:

1  $("#RoleTree").bind("select_node.jstree", function (event, data) {
2                 if (data.rslt.obj.length == 1) {
3 
4                     var value = data.rslt.obj.attr("id");   //获取节点的id值(id值由Controller赋值)
5                     nowroleid = value;
6                     var child = data.rslt.obj.attr("hid");

二.对于这个半勾状态不是很难,但是有点繁琐:

 1             //修正模块树的勾选情况
 2             function checkchang2(jstreeid) {
 3 
 4                 var $firstul = $("#" + jstreeid).children("ul");
 5                 var $li = $firstul.find("li");
 6                 // repeate($li);
 7                 for (var k = 0; k < $li.length; k++) {
 8                     check($($li.get(k)));
 9                 }
10                 for (var k = 0; k < $li.length; k++) {
11                     check($($li.get(k)));
12                 }
13             }
14 
15             function check(node) {
16                 var $li = $(node)
17 
18                 var $childli = $li.children("ul").children("li");
19                 if ($childli.length == 0) return;
20                 else {
21                     var state;
22                     for (var j = 0; j < $childli.length; j++) {
23                         if (j == 0) {
24                             if ($($childli.get(j)).hasClass("jstree-undetermined"))
25                                 $li.removeClass('jstree-checked').addClass("jstree-undetermined");
26                             else state = $($childli.get(j)).hasClass("jstree-checked");
27                         }
28                         else if (state != $($childli.get(j)).hasClass("jstree-checked")) {
29                             if ($li.hasClass("jstree-checked")) {
30 
31                                 $li.removeClass('jstree-checked').addClass("jstree-undetermined");
32                             }
33                         }
34                     }
35 
36                 }
37             }

代码中的jstree-checked就是指打勾状态,jstree-undetermined就是你说的半打勾状态,至于样式就是CSS决定的了。

真假不分 | 园豆:248 (菜鸟二级) | 2013-07-26 00:55

不管理怎样,还是谢谢!用你的这个方法。还是不能实现。也许是我描述没有清楚吧。我写一个测试项目,报错bub和我真实的项目一样。 嗯,你有时间能不能帮我看下嘛。谢谢

支持(0) 反对(0) KenyonLi | 园豆:165 (初学一级) | 2013-07-26 13:58

@LikeNeng: 你是用MVC开发的吗?这里氏JS的代码你对这个树引用这个方法看看

            function settreecheck(jsondate, jstreeid) {          //根据数据在树种查找元素
                var $idlist = new Array();
                var j;
                j = 0;

                var $lilist = $("#" + jstreeid).find("li");
                for (var i = 0; i < $lilist.length; i++) {
                    var tempid = $($lilist.get(i)).attr("id")
                    if (tempid != "") {
                        for (j = 0; j < jsondate.length; j++) {
                            if (jsondate[j] == tempid) {
                                var a = $($($lilist.get(i)).children("a").get(0)).text();

                                if ($($lilist.get(i)).hasClass("jstree-leaf")) $($lilist.get(i)).removeClass().addClass("jstree-checked").addClass("jstree-leaf");

                                else $($lilist.get(i)).removeClass("jstree-unchecked").removeClass("jstree-undetermine").addClass("jstree-checked");

                                $($($lilist.get(i)).parents("li")).removeClass("jstree-closed").addClass("jstree-open");

                                var $b = $($($lilist.get(i)).children("a").get(0));
                                  $b.removeClass().addClass("jstree-search");

                            }
                        }
                    }
                }
            }

这是一个类似你的那个项目,点击另外一棵树的某个叶子,显示该也是在第二颗树上拥有的权限,树的代码:

          $("#RoleTree").bind("select_node.jstree", function (event, data) {
                if (data.rslt.obj.length == 1) {

                    var value = data.rslt.obj.attr("id");   //获取节点的id值(id值由Controller赋值)
                    nowroleid = value;
                    var child = data.rslt.obj.attr("ifPerson");
                    if (value != "#") {
                        $.ajax({
                            type: "Post", 
                            url: '@Url.Action("GetModuleIDByRoleID","Role")',
                            cache: false,
                            data: "roleid=" + value,
                            datatype: "json",
                            success: function (msg) {
                                $("input#hidden:hidden").attr("value", value);
                                $("#hiddenleaf").attr("value", child);
                                if ($("#hiddenleaf").attr("value") != "") {
                                    AlertMessage.innerHTML = "";
                                    $("#ModuleTree").show()
                                    removeclass("ModuleTree");
                                    settreecheck(msg, "ModuleTree");
                                    checkchang2("ModuleTree");
                                }
                                else {
                                    //AlertMessage.innerHTML = "当前选择的是角色分类,请继续选择角色";
                                    $("#ModuleTree").hide();
                                }
                            }
                        })
                    }
                }
            });

我是用.NET MVC开发的,如果是别的可能帮到你

支持(0) 反对(0) 真假不分 | 园豆:248 (菜鸟二级) | 2013-07-26 14:28
0

谢谢,大家。这个问题我已经搞定。。

KenyonLi | 园豆:165 (初学一级) | 2014-04-17 14:54
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册