40 votes

Comment sélectionner un nœud spécifique par programme ?

J'ai un arbre. Je veux sélectionner le nœud qui est lié à l'objet qui a un emplacement avec l'id de 158. Cela fonctionne mais semble stupide. Quelle est la façon la plus idiomatique de procéder ?

var $tree = $('.jstree', myContext),
    node = $tree.find('li').filter(function() { 
        return ( $(this).data().location || {}).id === 158;
    });
$tree.jstree('select_node', n)

1 votes

Le code ci-dessus ne fonctionne pas pour vous ? Pourriez-vous nous fournir un exemple de jsfidlle ?

1 votes

@Radek - cela fonctionne, mais il semble qu'il doive y avoir une meilleure façon de faire que "prendre tous les li et tester leurs données". C'est comme si je n'arrivais pas à trouver la porte d'entrée et que j'utilisais une porte latérale. Cela pourrait, par exemple, ne pas fonctionner si la structure de l'arbre est modifiée pendant le filtrage ou si des éléments de la liste sont ajoutés/supprimés manuellement.

0 votes

J'ai le même problème, mais toutes les solutions que je trouve supposent que j'ai un mystérieux "ID" à sélectionner. Mais ce n'est pas le cas. Je n'ai qu'un tableau JSON récursif et pas d'ID. N'y a-t-il pas moyen de sélectionner un noeud par son chemin, comme /chemin/vers/quelque/fichier ?

45voto

Je voulais juste intervenir ici car aucune des réponses n'a fonctionné pour moi. Ce qui a finalement fonctionné est très simple :

$('#someTree').jstree('select_node', 'someNodeId');

Notez que je n'ai pas initialisé someNodeId en tant qu'objet jQuery. Il s'agit d'une simple chaîne de caractères.

Je l'ai fait juste après le chargement d'un arbre sans le placer dans un événement de liaison "ready", car il ne semble pas nécessaire de le faire.

J'espère que cela évitera à quelqu'un de passer quelques heures frustrantes. . .

S'accrocher à l'arbre une fois qu'il a été chargé :

.on('loaded.jstree', function() {
    // Do something here...
  });

23voto

Radek Points 4547

Sur la base de Groupes jsTree vous pouvez essayer

jQuery("#getStartedTree").jstree("select_node", "#test2"); 

si les données ressemblent à

The JSON in the TextFile.txt - borrowed from your simple example
 [
     {
     "data" : "A node",
     "children" : [ "Child 1", "Child 2" ]
     },
     {
     "attr" : { "id" : "test1" },
         "data" : {
             "title" : "Long format demo",
             "attr" : { "id" : "test2", "href" : "#" }
         }
     }
 ] 

et jsTree ont mis en place

My tree container is <div id="getStartedTree">

My jsTree code
 $("#getStartedTree").jstree({
            "themes": {
                "theme": "default",
                "url": "../App_Css/Themes/Default/style.css",
                "dots": true,
                "icons": true
            },
            "json_data": {
                "ajax": {
                    "url": "../SiteMaps/TextFile.txt",
                    "dataType": "json",
                    "data": function(n) {
                        return { id: n.attr ? n.attr("id") : 0 };
                    }
                }
            },
            "plugins": ["themes", "json_data", "ui"]
        }); 

C'est ce que vous recherchez ?

1 votes

Mais ici, vous devez attribuer des identifiants aux nœuds au fur et à mesure que vous les créez et trouver d'une manière ou d'une autre l'identifiant correspondant. Je ne sais pas comment ils l'ont implémenté mais l'API que je recherche serait quelque chose comme get_node_bound_to. var treeData = $jstree.jstree('data'), nodeData = findCorrectNodeIn(data); node = $jstree.jstree('get_node_bound_to', nodeData); $jstree.jstree('select_node', node);

2 votes

Quand attribuez-vous un identifiant à votre nœud ? Et comment ?

1 votes

Je serais vraiment très choqué s'ils ne fournissaient pas un moyen de le faire. La technique li ne fonctionne pas vraiment très bien. Par exemple, je dois sélectionner un nœud pour les données correspondant à certains critères lorsque la boîte de dialogue contenant le jstree s'ouvre. En utilisant cette technique li, je dois écouter l'événement de chargement et ensuite seulement faire la sélection.

5voto

Alberto Cerqueira Points 572

Je l'ai fait avec :

$('.jstree').jstree(true).select_node('element id');

ce code :

jQuery.each(produto.categorias, function(i, categoria) {
    $('#lista-categorias').jstree(true).select_node(categoria.dadoCategoria.id);
});

0 votes

Cela a fonctionné pour moi, mais j'ai dû d'abord désélectionner. Je l'ai fait avec $('#f_tree').jstree(true).deselect_all(true) ;

4voto

user2200690 Points 48

J'ai pu simuler un clic sur un nœud jstree comme moyen alternatif de sélectionner un nœud. Le code suivant est ce qui a été utilisé :

$(treeIdHandle + " li[id=" + nodeId + "] a").click();

1 votes

Cela nécessiterait que chaque nœud ait un attribut id, ce qui est l'une des choses qui n'est pas disponible par défaut (et qui serait terrible pour les performances si c'était le cas). Cependant, dans votre cas où l'id existe, il devrait être possible de simplifier en $('a', '#'+nodeId).click()

1 votes

Oui, il faudrait que chaque nœud ait un attribut id ou même tout autre attribut permettant d'identifier de manière unique un nœud dans un arbre.

3voto

David Liang Points 4863

Si vous remplissez l'arbre en utilisant des données HTML plutôt que JSON et que vous vous demandez comment définir l'attribut node_id il suffit de définir l'attribut id de l'élément <li> élément !

<div class="tree-menu">
    <ul class="menu">
        <li id="node_1">
            Node 1 - Level 1
           <ul class="menu">
               <li id="node_3">
                   Node 3 - Level 2
               </li>
           </ul>
        </li>
        <li id="node_2">
            Node 2 - Level 1
        </li>
    </ul>
</div>

Entonces

$('.tree-menu')
    .jstree(true)
    .select_node("node_3");

sélectionnera l'option Node 3 - Level 2 nœud.

Pour ceux qui obtiennent des erreurs javascript Pour cela, n'oubliez pas d'utiliser la version complète de jQuery mais pas la version mince !

Pour tous les électeurs en baisse Voici la démo qui prouve que cela fonctionne : https://jsfiddle.net/davidliang2008/75v3fLbs/7/

enter image description here

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X