0

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.

4

1 回答 1

3

我建议改用node.moveTo()

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, eg iterate reverse or discard nested nodes.

于 2014-08-19T09:19:10.240 回答