jstree 启用节点及其子节点

jstree Enable a node and its children

我正在使用:

jstree("disable_node", "#" + NodeID);

禁用 jstree 中的节点。并使用:

jstree("enable_node", "#" + NodeID);

启用一个节点。

是否有一种简单的方法来 disable/enable 节点及其子节点?

谢谢

我基于 jstree documentation about get_node function and jstree JSON 数据格式编写了一个简单的 JS 函数,enable/disable 输入节点及其在任何级别的所有子节点:

    NodeToggleEnable = function (node_id, enable) {
        var tree = $("#jstree-locations");
        var sub_tree = [node_id.toString()];
        var index = 0;
    while (index < children.length) {
        var child = tree.jstree("get_node", "#" + children[index]).children;
        sub_tree = sub_tree.concat(child);
        if (enable == false)
            tree.jstree("disable_node", "#" + sub_tree[index]);
        else
            tree.jstree("enable_node", "#" + sub_tree[index]);
        index++;
    }
}

此函数使用 children(字符串或对象数组)属性 由 get_node 函数选择的节点。

您可以使用下面的代码来完成。检查演示 - Fiddle.

  1. 写一个递归函数迭代多层结构

    function changeStatus(node_id, changeTo) {
        var node = $("#tree").jstree().get_node(node_id);
        if (changeTo === 'enable') {
            $("#tree").jstree().enable_node(node);
            node.children.forEach(function(child_id) {
                changeStatus(child_id, changeTo);
            })
        } else {
            $("#tree").jstree().disable_node(node);
            node.children.forEach(function(child_id) {
                changeStatus(child_id, changeTo);
            })
        }
    }
    
  2. 根据需要调用函数

    changeStatus(NodeID, 'enable');
    

    changeStatus(NodeID, 'disable');