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