第一个问题:如何获取默认状态下的子节点Id
第二个问题:默认选择子节点的时,让父类出现半勾状态。这个方法怎么写
麻烦高手们,帮帮忙。如果有好的方法跟我联系下:415859076 谢谢!
也许我描述的不太清楚,我自己写了一个测试项目与真实项目报错一样的列子。百度网盘下载地址:http://pan.baidu.com/share/link?shareid=4279454005&uk=3744480727
没有多太。麻烦高手们有时间,有时间帮我看看。。谢谢!
一.这里我不知道你说的默认子节点的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决定的了。
不管理怎样,还是谢谢!用你的这个方法。还是不能实现。也许是我描述没有清楚吧。我写一个测试项目,报错bub和我真实的项目一样。 嗯,你有时间能不能帮我看下嘛。谢谢
@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开发的,如果是别的可能帮到你
谢谢,大家。这个问题我已经搞定。。