5

jsTreeで一致しない要素を非表示にしながら、一致する要素のサブノードを表示するにはどうすればよいですか?

私の知る限り、2つの可能性しかありませんが、どちらもこの場合には適していません。設定することにより、jsTreeに要素をまったく非表示にしないようにすることができます

show_only_matches: false

または、設定することで、一致しない要素をすべて非表示にすることができます

 show_only_matches: true

ただし、このオプションは、一致したノードのサブノードも非表示にします。

4

4 に答える 4

1

最後に、解決策を見つけましたが、見た目はあまり良くありませんが、機能します。見つかった要素にenableSubtree()関数を渡すだけで、ノードが表示され、正しい外観が処理されます(つまり、点線が正しく表示および非表示になります)。

enableSubtree = function(elem) {
  elem.siblings("ul:first").find("li").show();
  return correctNode(elem.siblings("ul:first"));
};

correctNode = function(elem) {
  var child, children, last, _j, _len1, _results;
  last = elem.children("li").eq(-1);
  last.addClass("jstree-last");
  children = elem.children("li");
  console.log(children);
  _results = [];
  for (_j = 0, _len1 = children.length; _j < _len1; _j++) {
    child = children[_j];
    _results.push(correctNode($(child).children("ul:first")));
  }
  return _results;
};

この関数の呼び出しは次のようになります。

enableSubtree($(".jstree-search"))

見つかったすべてのノードはCSSクラス.jstree-searchを受け取るためです。

于 2012-07-10T13:14:03.683 に答える
1
"探す" : {
   "show_only_matches":true、
   "show_only_matches_children":true
}
于 2018-08-08T16:56:08.933 に答える
0

「search.jstree」をそのようなものでオーバーロードしようとしましたか?(show_only_matches == falseを使用)

 $("#mytreecontainerid").bind("search.jstree", function (e, data) {
   // close the whole tree if a search text in set
   if (data.rslt.str.length>0) $("#mytreecontainerid").jstree('close_all');

   // open the found nodes' parent
   for (var i = 0 ; i<data.rslt.nodes.length ; i++) {
     data.inst._get_parent(data.rslt.nodes[i]).open_node(this, false);
     /* here you can do any additional effect to your node */
   }
 });
于 2012-07-09T10:44:34.407 に答える
0

これが私がフィルタリングのために行った簡単なコードです。

    filterTree = function (elem) {
        $('li a', elem).not(".jstree-search").parent().css('display', 'none');
        $('a.jstree-search', elem).parentsUntil(elem, 'li').css('display', 'block');
    };

jstreeインスタンスで呼び出します。

    filterTree($treeVar);

最適なソリューションではないかもしれませんが、完全に機能します:)

于 2013-09-02T10:47:22.703 に答える