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。

  1. 在实际的JSON中,将要禁用的节点的a_attr字段设置为“no_checkbox”,如下所示。 这会将类“no_checkbox”添加到包含节点文本,图标和复选框的元素中。

    node = { text: "foo", a_attr: { class: "no_checkbox" } }

  2. 在css中,创建一个这样的选择器:

    .no_checkbox>i.jstree-checkbox { display:none }

  3. 完成!

这将只选择带有no_checkbox类的元素内的复选框,它将从布局中删除它们。 此方法优于其他答案的优点是,您只需从元素中删除类no_checkbox即可返回复选框。 例如,您可以在select_node.jstree事件的事件处理程序中执行此select_node.jstree ,然后获取作为参数传入的DOM节点。

当然,如果你使用HTML而不是JSON输入数据,你可以手动将css类添加到html中,或者使用php /其他服务器端语言,它也可以正常工作。

您还可以阻止复选框插件添加它们:

  1. 将类添加到您不希望具有复选框的任何节点类型的标记(我使用与我的rel相同)。

  2. 编辑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"; .... });