jsTree隐藏复选框
我使用jsTree jQuery插件来显示5级深度树。 我想不在最后一级显示复选框。 有没有办法在设置或一些jquery处理中执行此操作后我可以删除这些复选框? 我可以使用它们的类型插件禁用它们,但我真的希望它们不可见。
这是我的树的一个例子“[x]”=一个复选框
[x] lvl 1 [x] lvl 2 [x] lvl 3 [x] lvl 4 [x] lvl 5a [x] lvl 5b [x] lvl 5c
这是我想要的一个例子“[x]”=一个复选框
[x] lvl 1 [x] lvl 2 [x] lvl 3 [x] lvl 4 lvl 5a lvl 5b lvl 5c
编辑答案发现
找到了答案。 添加将在加载树时调用的.bind,然后添加一些简单的jquery来隐藏复选框。
$("#right-tree2").bind("loaded.jstree", function(event, data) { $('.lvl4').find('ins.jstree-checkbox').hide(); }) .jstree({....});
如果您是从JSON创建树,那么我发现删除节点的最简单方法是使用一些css。
-
在实际的JSON中,将要禁用的节点的a_attr字段设置为“no_checkbox”,如下所示。 这会将类“no_checkbox”添加到包含节点文本,图标和复选框的
元素中。
node = { text: "foo", a_attr: { class: "no_checkbox" } }
-
在css中,创建一个这样的选择器:
.no_checkbox>i.jstree-checkbox { display:none }
-
完成!
这将只选择带有no_checkbox
类的元素内的复选框,它将从布局中删除它们。 此方法优于其他答案的优点是,您只需从
元素中删除类
no_checkbox
即可返回复选框。 例如,您可以在select_node.jstree
事件的事件处理程序中执行此select_node.jstree
,然后获取作为参数传入的DOM节点。
当然,如果你使用HTML而不是JSON输入数据,你可以手动将css类添加到html中,或者使用php /其他服务器端语言,它也可以正常工作。
您还可以阻止复选框插件添加它们:
-
编辑jquery.jstree.js Checkbox插件,将类添加到.not()语句,其中复选框被添加到DOM。 在1.0-rc3中,它看起来像这样(围绕第2870行):
$t.children("a" + (_this.data.languages ? "" : ":eq(0)") ).not(":has(.jstree-checkbox) // ADD THE LIST OF CLASSES HERE - BE SURE TO INCLUDE THE DOTS AND SEPARATE WITH COMMAS ").prepend("<\ins class='jstree-checkbox'> <\/ins>").parent().not(".jstree-checked, .jstree-unchecked").addClass( ts ? "jstree-unchecked" : c );
这样,你不必添加,然后删除它们(如果可以避免的话,这是不好的做法)。
试试这个,
$("#right-tree2").bind("loaded.jstree", function(e, data) { var currentNode = data.rslt.obj.attr("id"); var nodeLevel = data.inst.get_path().length; if(nodeLevel == 4){ $('#'+currentNode).find('> a > .jstree-checkbox').remove(); } })
我发现了另一种使用css的解决方案 这个简单的代码隐藏了第一层中的复选框
.jstree-container-ul>li>a>i.jstree-checkbox { display:none }
要完全隐藏特定节点的复选框,使节点数据来自服务器,请添加以下JS代码
$('#tree_2').on('ready.jstree', function () { $("#tree_2").jstree().get_node("node1_id").a_attr["class"] = "no_checkbox"; $("#tree_2").jstree().get_node("node2_id").a_attr["class"] = "no_checkbox"; .... });