3

ルートノードかどうかに応じて、既存のノードの内部または下にノードを作成したいと思います。(ツリーウィジェットは通常、ツリーのリスト、またはルートノードが表示されていないツリーです。)

get_parentを試しましたが、それがルートノードであるかどうかを確認するにはどうすればよいですか?

var parent = $("#demo1").jstree('_get_parent', $("#foo"));
var node = $("#demo1").jstree('_get_node', $("#foo"));

私を混乱させたのは、get_nodeがget_parentと同じオブジェクトを返すように見えることです。

jstree_pre1.0_fix_1を使用しています。

編集:

親の親の既知のIDをチェックすることになりました。

var node = $(e.replyto);
if (node.length) {
  if (node.parent().parent().attr('id') == 'demo1') {
    $("#demo1").jstree("create_node", node, 'last',{'attr': {'id':e.id}, 'state':'open', 'data': e.data}) ;
  } else {
    $("#demo1").jstree("create_node", node, 'after',{'attr': {'id':e.id}, 'state':'open', 'data': e.data}) ;
  }
} else {
    $("#demo1").jstree("create_node", -1, 'after',{'attr': {'id':e.id}, 'state':'open', 'data': e.data});
}
4

3 に答える 3

4

ノードでget_parent()を呼び出すことができます。'#'を返す場合、そのノードはルートノードです。例えば:

var node = ...;

if($('#demo1').jstree(true).get_parent(node) == '#') {
    // node is a root node
}
于 2015-03-23T14:48:20.460 に答える
2

これは理想的なソリューションではありませんが、in paramを使用_get_children-1てすべてのルートノードを取得し、ノードがリストに含まれているかどうかをテストできます。

._get_children ( node )
  Use -1 to return all root nodes.

http://www.jstree.com/documentation/coreから)

于 2012-04-09T07:39:45.357 に答える
1

コンテキストメニュープラグインを使おうとしているので、これに少し苦労しています。ユーザーが新しいルートノードを作成できるようにしたくありません。サブノードの作成のみを許可したい。(ルートノードは、現在のユーザーが属するグループを表すため、管理者によって事前に設定されています)。私の最初の混乱は、プロパティ_get_childrenを持つオブジェクトを返すことでした。length配列ではありませんが、length実際のルートノードの数に正しく対応するプロパティがあります。基になるコードを見ると、このjstree _get_childrenメソッドはjQueryのchildrenメソッドを使用しています。このメソッドは、インデックス0、1、2などの子ノードを他のjQueryプロパティおよびメソッドとともに返します。ノードの配列だけを抽出して使用すると便利だと思いましたindexOf現在のノードがルートノードであるかどうかを確認します。だから、これが私のコンテキストメニュー設定のitemsプロパティからのスニペットです:jstree

'items': function(node){
    var rootChildren = this._get_children(-1), 
    rootNodes = [], 
    i;
    //rootChildren is now a fancy jQuery object with the child nodes assigned
    //to keys 0, 1 etc.
    //Now create a simple array
    for(i = 0; i < rootChildren.length; i += 1){
        rootNodes[i] = rootChildren[i];
    }
    //We can now use indexOf to check if the current node is in that array
    //Note again that node is a fancy jQuery object, the actual DOM element
    //is stored in node[0]
    console.log(rootNodes.indexOf(node[0]) > -1);
    //code here to add whatever items you want to the context menu.
}

ツリーを右クリックするとtrue、コンソールウィンドウに、ルートノードとfalse階層の下位にあるノードが表示されます。8未満のIEの場合(私は思う)、以前のバージョンのIEはネイティブメソッドとして提供されていないため、のindexOfメソッドを提供する必要があることに注意してください。ArrayindexOf

于 2013-04-16T03:48:28.420 に答える