Alex
Alex

Reputation: 1

Fancytree: Remove nodes without children

I want to remove selected nodes and move all children to it's place. I use code:

ref = $('#tree').fancytree("getTree"),
searchIDs = ref.getSelectedNodes();

searchIDs.forEach(function(node){
 $children = node.children;
 if ($children!==null)node.parent.addChildren($children,node.getNextSibling());
 node.remove();
});

Where #tree is div with ul\li. If Nodes > 1 I have error "Uncaught TypeError: Cannot call method 'addChildren' of null " and only one node is removed.

Upvotes: 0

Views: 4444

Answers (1)

mar10
mar10

Reputation: 14794

I would suggest to use node.moveTo() instead:

var tree = $("#tree").fancytree("getTree"),
    selNodes = tree.getSelectedNodes();

selNodes.forEach(function(node) {
    while( node.hasChildren() ) {
        node.getFirstChild().moveTo(node.parent, "child");
    }
    node.remove();
});

Note that you might have to add some special handling when selected nodes are descendants of other selected nodes, e.g. iterate reverse or discard nested nodes.

Upvotes: 3

Related Questions