12

我对 jQuery 和 jstree 完全陌生。我正在使用 jstree 并使用 xml 填充数据。但是想为每个节点捕获事件,无论是否检查以及它们的 ID。我尝试使用 jstree 的插件 API 之类的change_state()check_node()或者select_node()它不起作用。另外我想在一个数组中获取所有选定的节点数据以进行进一步处理..有人可以帮忙吗?

谢谢...

4

2 回答 2

22

我喜欢 jstree 插件,但它没有很好的文档记录,也不是为了符合插件开发的 jquery ui 标准而构建的。我已经使用 1.0rc2 来完成你想要做的事情。

您必须在实例化 jstree 之前绑定“加载”事件,所以我猜它与“change_state”事件相同。需要注意的另一件事是“change_state”不仅仅是由于复选框而导致的更改。例如,当您展开节点时它也会触发(但由于某种原因不会折叠)。也就是说,我在“change_state”处理程序中进行了一些杂乱的检查,以尝试从复选框更改中过滤掉不需要的事件。点击处理程序的最少代码是

$("#treeElement").bind("change_state.jstree", function (e, d) {
    var tagName = d.args[0].tagName;
    var refreshing = d.inst.data.core.refreshing;
    if ((tagName == "A" || tagName == "INS") &&
      (refreshing != true && refreshing != "undefined")) {
    //if a checkbox or it's text was clicked, 
    //and this is not due to a refresh or initial load, run this code . . .
    }
});

然后,您单击的元素是d.rslt,您可以d.inst.get_checked()仅针对单击的元素或d.inst.get_checked(d.rslt)包含已检查的子节点的对象获取选中的项目。使用 jquery 的 .each 函数来处理节点。

于 2011-03-31T19:52:43.427 回答
3

当前版本的 jstree 似乎与 check_node.jstree 绑定有问题。此外,当复选框插件在当前版本中处于活动状态时,select_node.jstree 绑定也不会触发。

前往这里,您可以向创作者提问,甚至可以查看已经提出的问题。

至于$.jstree._reference("#demo").get_selected();您可以通过使用获取每个项目的ID$.jstree._reference("#demo").get_selected().each(function(index,element){alert($(element).attr("id"));});

于 2011-02-02T10:25:52.817 回答