Search code examples
jstreejstree-search

jsTree AJAX search with some node childs?


I try to implement ajax search in jsTree, but only inside one of root node.

I read docs, and found some info about:

$.jstree.defaults.search.ajax

A str (which is the search string) parameter will be added with the request, an optional inside parameter will be added if the search is limited to a node id.

My SEARCH AJAX config:

        "search": {
        // search config
        "show_only_matches": true,
          'ajax': {
            'url': "/ajax/root-nodes"
          }
        },

jsSearch call:

$tree.jstree(true).search(searchText);

I also use lazy-loading of subnodes.

Is anybody do something like this?


Solution

  • In your call you are not limiting the search to a particular node:
    http://www.jstree.com/api/#/?q=search%28&f=search%28str%20[,%20skip_async]%29

    If for example your root node ID is "root1" use this:
    $tree.jstree(true).search(searchText, false, true, 'root1');

    Once the search function is invoked an AJAX request will be made as per your config. So in your case if the user searched for "foo" - it will be a GET request with two params - str and inside:
    GET /ajax/root-nodes?str=foo&inside=root1

    Your response should be a JSON array, containing all the unique parent IDs that need to be loaded (and opened). You'd probably want to build this array by performing a server-side search, collecting the parents of each match, and then combining them in an array (and leaving only unique entries):
    ["root1","somenode"]