2017-06-16 2 views
1

Ich erstelle eine Schaltfläche, um Knoten zu löschen, nachdem ich sie ausgewählt habe. Ich möchte, dass nur untergeordnete Knoten gelöscht werden können. Um dies zu tun, muss ich überprüfen, ob der Knoten ein Elternteil ist oder nicht.Wie kann ich überprüfen, ob ein Knoten ein Elternteil in jstree ist, nachdem ich auf eine Schaltfläche geklickt habe?

So würde Code in etwa so aussehen

$(".delete-node").click(function() { 
    // gets the selected nodes 
    $('#jstree1').jstree(true).get_selected(); 

    if (data.instance.is_leaf) { 
     //My problem is HERE. Only delete if all nodes are children/not parent 
     //here I delete the nodes selected 
     $('#jstree1').jstree(true) 
        .delete_node($('#jstree1') 
        .jstree(true) 
        .get_selected()); 
    } 
});   

Ich weiß, das ist einfach, aber ich kann nicht zu setzen scheinen, um es zu arbeiten. Ich bin ein bisschen neu zu jQuery und JavaScript also was fehlt mir?

Antwort

1

Sie müssen den Knoten durch die ID erhalten und dann überprüfen, ob es ein Elternteil ist. Siehe Code wie unten. Überprüfen Sie die Demo - Codepen Demo

$('#jstree1') 
    .jstree({ 
    core: { 
     data: treeData, 
     check_callback: true // don't forget to set this param to true 
    } 
    }); 

$(".delete-node").click(function() { 
    var tree = $('#jstree1').jstree(); 
    // gets the selected nodes 
    var selectedNodeIds = tree.get_selected(); 
    selectedNodeIds.forEach(function(nodeId) { 
    var node = tree.get_node(nodeId); 
    if (!tree.is_parent(node)) { 
     tree.delete_node(node) 
    } 
    }); 
}); 
+0

Genau das habe ich gefragt. Es klappt! – PlotTwist

+0

Froh, dass es geholfen hat! –

0

Sie können $(element).children().length === 0 tun, was bedeutet, dass es keine untergeordneten Knoten hat.

Um alle untergeordneten Knoten in diesem Fall zu löschen, werden $(element).children().remove() alle untergeordneten Knoten entfernt.

+0

Ich habe es versucht, aber mir fehlt noch etwas. Mein Code sieht folgendermaßen aus: if ($ ('. Jstree-clicked'). Children(). Length === 0) { alert ('haha'); } – PlotTwist

+0

können Sie bitte den Zustand hervorheben, der Ihrer Meinung nach fehlt? Ich kann von dort helfen – gauravmuk

+0

Der Alarm wird nicht auftauchen, was bedeutet, dass die Bedingung nicht wahr ist. Aber warum nicht? Ich meine, ich wähle die Knoten aus, ich klicke auf die Schaltfläche, wenn Knoten, auf die geklickt wird - .jstree-clicked - keine Kinder hat, sollte es eine Warnung geben, aber nichts passiert. – PlotTwist

Verwandte Themen