如果我正确理解这一点,您希望在选择 jsTree(文件)的父级(文件夹)之一时选择所有最低的后代。
不幸的是,我没有找到比下面的方法更直接的方法。我正在使用 jsTree 3.1.1 并设法使用以下方法解决了这个问题:
var $demo = $("#demo");
var nodes = $demo.jstree("get_top_selected", true);
//Selects all of the children of each selected node including folders
if(nodes.length > 0){
nodes.forEach(function(node, i){
$demo.jstree("select_node", node.children_d, true, false);
});
}
var fileNodes = $demo.jstree("get_bottom_selected", false);
//We now need to deselect everything and only select the file nodes
$demo.jstree("deselect_all", true);
$demo.jstree("select_node", fileNodes, true, false);
上面的代码允许用户“选择”多个文件夹并选择这些文件。
"get_top_selected" 函数的值为 true 的参数返回完整节点,而不仅仅是 ID。这使您可以访问节点的子节点。
函数"select_node" 接受三个参数。第一个是要选择的节点(在这种情况下是当前父节点的后代)。如果第二个参数设置为 true,它会阻止 changed.jstree 事件为每个选定节点触发。第三个参数设置为false,因为设置为true 会阻止子文件夹打开。
函数"get_bottom_selected" 只返回一个节点,如果它同时被选中并且它本身没有任何子节点。由于我们现在只对节点 ID 感兴趣,因此我们可以传递参数 false(或完全省略它)。
再次将true 的参数传递给函数"deselect_all" 会阻止changed.jstree 事件触发。
如果您想查看 jsTree API 文档,您可以找到它们here。该列表被过滤为仅包含选择函数和事件。 API 的完整列表可以在here 找到。
我希望这会有所帮助,但如果您需要对任何代码进行进一步说明,请告诉我^_^