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 ?

2voto

weijia Points 21

J'utilise jstree 3.0.8. je n'utilise pas "state".

'plugins' : \['dnd','sort','types','contextmenu','wholerow','ui'\]

et le serveur offre le json, le nœud sélectionné a

"state":{"selected":true,"opened":true}

1voto

Mahmoud Mostafa Points 144

Cette solution fonctionne pour moi

// after the tree is loaded
$(".jstree").on("loaded.jstree", function(){
    // don't use "#" for ID
    $('.jstree').jstree(true).select_node('ElementId');
});

et même dans une boucle php (dynamiquement) :

$(".jstree").on("loaded.jstree", function(){
    <?php foreach($tree as $node): ?>
        $('.jstree').jstree(true).select_node('<?=$node?>');
    <?php endforeach;?>
});

J'espère que cela vous conviendra.

0voto

sep7696 Points 21

Je pense qu'il faut écrire un code pour sélectionner le nœud après l'initialisation de l'arbre.

 $('#jstree')
    .on('ready.jstree', function (e, data) {
       // do function after jstree initialized
      $('#jstree')
        .jstree(true)
        .select_node('nodeid');
    });

J'espère que cela fonctionnera :)

-1voto

Paully Points 448

Déclencher un clic sur la première ancre

$("#jstree .jstree-anchor:first").click(); 

ou par l'identifiant du nœud 158

$("#jstree #158").find(".jstree-anchor:first").click(); 

$('#' + 158).find(".jstree-anchor:first").click();

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