Search code examples
javascriptjqueryjstreechildren

jstree Enable a node and its children


I am using:

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

to disable a node in jstree. and using:

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

to enable a node.

Is there a simple way to disable/enable a node and it's children?

thank you


Solution

  • You can do it with the code as below. Check demo - Fiddle.

    1. Write a recursive function to iterate multi-level structures

      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. Call function depending on what you need

      changeStatus(NodeID, 'enable');
      

      or

      changeStatus(NodeID, 'disable');