2017-06-16 9 views
1

ノードを選択した後にノードを削除するボタンを作成しています。私は子ノードだけを削除できるようにしたい。それを行うには、ノードが親であるかどうかを確認する必要があります。ボタンをクリックした後、ノードがjstreeの親ノードであるかどうかを確認するにはどうすればよいですか?

だからコードが

$(".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()); 
    } 
});   

のようになります。私は、これは簡単です知っているが、私は仕事にそれを置くように見えることはできません。私はちょっとjQueryとJavaScriptの新機能ですので、何が欠けていますか?

答えて

1

ノードからIDを取得し、それが親であるかどうかを確認する必要があります。下記のコードを参照してください。デモをチェック - 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

これはまさに私が尋ねたものです。できます! – PlotTwist

+0

うれしかった! –

0

$(element).children().length === 0は、子ノードがないことを意味します。

このような場合にすべての子ノードを削除する場合は、$(element).children().remove()はすべての子ノードを削除します。

+0

はちょうどそれを試してみましたが、私はまだ何かが欠けています。私のコードは次のようになります:if($( 'jstree-clicked')。children()。length === 0){ alert( 'haha'); } – PlotTwist

+0

あなたが欠けていると感じる条件を強調してください。私はそこから助けることができます – gauravmuk

+0

アラートがポップアップしていないということは、条件が真ではないことを意味します。しかし、どうしてですか?クリックされたノード(.jstreeがクリックされたノード)に子がない場合は、警告を表示する必要がありますが、何も起こりません。 – PlotTwist

関連する問題