5

マルチレベルのjsTreeで、特定のノード(おそらくリーフノード)を選択し、そのすべての親を展開するにはどうすればよいですか?例:
このJSFiddle(http://jsfiddle.net/mmeah/fyDE6/)から、プログラムで孫を選択し、すべての親ノードを開きます。

一部のコンテキストでは、ユーザーが自分のサイトへのディープリンクをたどった場合に、ユーザーがツリー内の正しいノードに戻るようにしようとしています。

4

2 に答える 2

5

jsTreeは、任意のノードを開くように任意にトリガーするopen_node()関数を提供します。開いていない親がないかツリーをスキャンして開きます。

例: http: //jsfiddle.net/mmeah/yyy8W/

$("#findChild").click(function(){
    $.jstree._reference(myTree).open_node("#Node_001",function(){;},false);
});
$("#findGrandChild").click(function(){
    var closedParents = $("#Node_003").parents("li.jstree-closed");
    for(var i=closedParents.length-1;i>=0;i--){
        pleaseOpen($(closedParents[i]));
    }
});

function pleaseOpen(thisNode){
    if(typeof thisNode=="undefined") return;
    if(thisNode.hasClass("jstree-leaf") || thisNode.hasClass("jstree-open") ) return;
    $.jstree._reference(myTree).open_node(thisNode,function(){;},true);
}

</ p>

于 2012-08-20T16:05:17.213 に答える
2

ああ、私は正しい方向に進んでいましたが、ディープリンク解析コードとツリーの構築の間に競合状態がありました

ノードを選択してイベントをトリガーするには

$("#tree").jstree("select_node", selector).trigger("select_node.jstree");

ツリーがロードされた後にこれを行うには、それが機能します...

$("#tree").jstree(...).bind("loaded.jstree", function () 
{
    $("#tree").jstree("select_node", selector).trigger("select_node.jstree");
});
于 2012-08-20T15:37:36.090 に答える