3

我在选择父节点时选择子节点时遇到困难,也想打开子文件夹并选择所有子节点(不确定我是否清楚)所以我知道如何通过以下方式获取所有子节点:

selected_nodes = $("#demo").jstree("get_selected", null, true); 
var tree = jQuery.jstree._reference('#demo'); 
var children = tree._get_children(selected_nodes); 


但并没有真正选择或打开子文件夹和节点

4

5 回答 5

2

这可能不是 OP 想要的,而是在 JSTree 3.3 上。我用它来打开选定父节点下的所有节点。

$(treeContainer).bind("select_node.jstree", function (e, data) {
            return data.instance.open_all(data.node);
        });
于 2017-01-24T12:17:12.370 回答
1

我放弃了这个想法..现在我只是做ajax请求来加载孩子并接收一个json对象,从那里我可以看到它是否是一个文件或目录,如果它是一个目录又是另一个请求,就像这样我有整体结构

于 2012-10-12T15:20:40.180 回答
1

您必须打开 two_state 复选框以允许独立选择父节点和子节点。下面我为复选框插件配置了“two_state”参数:

$("#docTree").jstree({
    "themes": {
        "theme": "classic",
        "url": "jstree/themes/classic/style.css"
    },
    "plugins": ["themes", "ui", "checkbox", "json_data"],
    "checkbox": { "two_state" : true }
})

在此处查看文档:http: //www.jstree.com/documentation/checkbox

于 2012-10-22T10:22:12.677 回答
1

如果我正确理解这一点,您希望在选择其父级(文件夹)之一时选择 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);

上面的代码允许用户“选择”多个文件夹并选择这些文件。

带有函数值的参数true返回"get_top_selected"完整节点,而不仅仅是 ID。这使您可以访问节点的子节点。

函数"select_node"接受三个参数。第一个是要选择的节点(在这种情况下是当前父节点的后代)。如果第二个参数设置为 true,它会阻止changed.jstree为每个选定节点触发事件。第三个参数false设置为true防止子文件夹打开的设置。

"get_bottom_selected"如果一个节点都被选中并且它本身没有任何子节点,则该函数仅返回一个节点。由于我们现在只对节点 ID 感兴趣,我们可以传递参数 false(或完全省略它)。

再次将参数传递true给函数"deselect_all"可防止changed.jstree事件触发。

如果您想查看 jsTree API 文档,您可以在此处找到它们。该列表被过滤为仅包括选择函数和事件。可以在此处找到 API 的完整列表。

我希望这会有所帮助,但如果您需要对任何代码进行进一步说明,请告诉我^_^

于 2015-07-31T14:18:52.873 回答
0
select all child nodes when parent selected ,
         $(data.rslt.obj).find("li").each( function( idx, listItem ) {
             var child = $(listItem); // child object
             $.jstree._reference("#associateRightHandTree").check_node(child);
         });

unselect all child nodes when parent unselected ,
        $(data.rslt.obj).find("li").each( function( idx, listItem ) {
            var child = $(listItem); // child object
            $.jstree._reference("#associateRightHandTree").uncheck_node(child);
        });
于 2013-01-17T07:04:28.213 回答