web-dev-qa-db-ja.com

jsTree:選択したノードのIDをjsTreeのルートノードに取得する方法は?

選択したノードのIDをjsTreeのルートノードに取得するにはどうすればよいですか?

Cがノードとして選択されていると仮定すると、Cのすべての親IDを取得するにはどうすればよいですか。

A

  • B

    • C

      + C1

      + c2

次のコードは、直接の親IDのみを返します。[〜#〜] c [〜#〜]を選択した場合、[〜#〜 ] b [〜#〜]

 .bind("select_node.jstree", function (event, data) {  
    //`data.rslt.obj` is the jquery extended node that was clicked          
    alert("Selected node = "+ data.rslt.obj.attr("id"));
    alert("Parent of Selected node = "+ data.inst._get_parent(data.rslt.obj).attr("id"))
 });

出力:

Selected node = C

Parent of Selected node = B

すべての親ノードID、つまり選択したノードからルートノードを取得する方法はありますか?

  • JsTreeで選択したノードのすべての子ノードを取得するにはどうすればよいですか?

この件に関するヘルプやガイダンスをいただければ幸いです。

12
StackOverFlow

JQueryでparentsを使用してすべての親を取得し、liでフィルタリングします。すべてのツリーアイテムはlijstreeであるため、次のことを試してください。

var parents = data.rslt.obj.parents("li");

また、子供には、次のようにjQueryでchildrenを使用します。

var children = data.rslt.obj.parent().find('li');

編集上記を使用して、すべての親と子を取得し、それぞれのすべての配列に配置する方法は次のとおりです:

親:

var parents = [];
data.rslt.obj.parents("li").each(function () {
    parents.Push({ id: $(this).attr("id"), description: $(this).children("a").text() });
});

子供:

var children = [];
data.rslt.obj.find("li").each(function () {
    children.Push({ id: $(this).attr("id"), description: $(this).children("a").text() });
});
16
mattytommo

1より簡単な解決策

 .get_path ( node , id_mode )

iDの配列またはノード名の配列として、ノードへのパスを返します。混合ノード:これは、DOMノード、jQueryノード、またはツリー内の要素を指すセレクターであり、そのパスが必要です。boolid_mode:trueに設定すると、親の名前の代わりにIDが返されます。デフォルトはfalseです。

// To get path [ID or Name] from root node to selected node 

var ids = data.inst.get_path('#' + data.rslt.obj.attr('id'),true);

// Returns IDs from root to selected node

var names = data.inst.get_path('#' + data.rslt.obj.attr('id'),false); 

// Returns Name's from root to selected node 

alert("Path [ID or Name] from root node to selected node = ID's = "+ids+" :: Name's = "+names);
11
StackOverFlow