私がこれを正しく理解していれば、親 (フォルダー) の 1 つが選択されているときに、jsTree (ファイル) の最下位の子孫をすべて選択する必要があります。
残念ながら、以下よりも直接的なアプローチは見つかりませんでした。私はjsTree 3.1.1を使用しており、次の方法でこの問題を解決できました:
var $demo = $("#demo");
var nodes = $demo.jstree("get_top_selected", true);
//Selects all of the children of each selected node including folders
if(nodes.length > 0){
nodes.forEach(function(node, i){
$demo.jstree("select_node", node.children_d, true, false);
});
}
var fileNodes = $demo.jstree("get_bottom_selected", false);
//We now need to deselect everything and only select the file nodes
$demo.jstree("deselect_all", true);
$demo.jstree("select_node", fileNodes, true, false);
上記のコードにより、ユーザーは複数のフォルダーを「選択」し、それらのファイルを選択することができます。
関数の値true
を持つパラメーターは、 "get_top_selected"
ID だけでなく完全なノードを返します。これにより、ノードの子にアクセスできます。
関数"select_node"
は 3 つのパラメーターを取ります。1 つ目は、選択するノードです (この場合は、現在の親ノードの子孫)。2 番目のパラメーターを true に設定すると、changed.jstree
選択した各ノードでイベントが発生しなくなります。3 番目のパラメーターは、子フォルダーが開かないようにするためのfalse
設定として設定されます。true
この関数は、ノードが選択されていて、それ自体に子がない"get_bottom_selected"
場合にのみ、ノードを返します。ここではノード ID のみに関心があるため、パラメーター false を渡す (または完全に省略する) ことができます。
のパラメーターをtrue
関数"deselect_all"
に再度渡すと、changed.jstree
イベントが発生しなくなります。
jsTree API ドキュメントを確認したい場合は、ここで見つけることができます。そのリストは、選択した関数とイベントのみが含まれるようにフィルター処理されます。API の完全なリストは、ここにあります。
これがお役に立てば幸いですが、コードについてさらに説明が必要な場合はお知らせください ^_^