Reputation: 1
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
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