我完全不懂jQuery和jstree。我正在使用jstree并使用XML填充数据。但是,我想捕获每个节点的事件,无论是否选中以及它们的ID。我尝试使用jstree的插件API(如change_state()
,check_node()
或select_node()
),但不起作用。另外,我想获取所选节点数据的数组以供进一步处理。有谁能帮忙吗?
谢谢...
我完全不懂jQuery和jstree。我正在使用jstree并使用XML填充数据。但是,我想捕获每个节点的事件,无论是否选中以及它们的ID。我尝试使用jstree的插件API(如change_state()
,check_node()
或select_node()
),但不起作用。另外,我想获取所选节点数据的数组以供进一步处理。有谁能帮忙吗?
谢谢...
我喜欢jstree插件,但它的文档不够完善,也不符合jQuery UI插件开发的标准。我已经使用1.0rc2来完成你想做的事情。
在实例化jstree之前,你必须绑定"loaded"事件,所以我猜"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函数来处理这些节点。
check_node.jstree
和 uncheck_node.jstree
事件确实被触发了,只是在 jstree 的文档中没有提到。 - rgvcorley$.jstree._reference("#demo").get_selected();
,您可以使用$.jstree._reference("#demo").get_selected().each(function(index,element){alert($(element).attr("id"));});
来获取每个项目的ID。