如何在不重新加载的情况下更新jstree节点值



我用以下代码创建了一个jstree:

$('#mytree').jstree({"core": { "data" : value
                             , "themes" : { "dots": false
                                          , "icons": false }
                             }
                    }
                   );

我可以通过以下代码用新数据重建它:

$('#mytree').jstree(true).settings.core.data = new_data;
$('#mytree').jstree(true).refresh();

但是,当您有很多节点时,它可能会很昂贵。我想实现的是,我想在不重建整个树的情况下更新元素(即node.text部分)的值。我通过websocket在一条消息中获得新值(完整的JSON字符串将是new_data),但结构没有改变。我该怎么做?非常感谢。

您需要的不是refresh()而是redraw(),因此代码是

$('#mytree').jstree(true).settings.core.data = new_data;
$('#mytree').jstree(true).redraw(true);

您可以在jstree API中找到这些函数。

根据zmirc的建议,在v3.1中使用:

$('#mytree').jstree(true).settings.core.data = new_data;
$('#mytree').jstree(true).refresh();

用于删除节点并重新加载树

 $('#mytree').jstree(true).refresh();

对于那些需要在不重新启动树的情况下重新绘制的人,请使用

jQuery('#data').jstree(true).refresh(true);

为我工作:$('#structureRows').jstree("destroy").empty();

function CreateStructureTree(jsonData)
        {
            $('#structureRows').jstree("destroy").empty(); 
            $('#structureRows').jstree
                ({
                    'core' : {
                        'data':
                            [
                                jsonData,
                                {
                                'id' : 'node_2',
                                'text' : 'Root node with options',
                                'state' : { 'opened' : true, 'selected' : true },
                                'children' : [ { 'text' : 'Child 1' }, 'Child 2']
                                }
                            ]
                     }
                });
            }

您可以通过此刷新节点

$('#treeView').jstree(true).refresh_node("node_id_here")

$('#mytree').jstree(true).refresh();正在工作,但在我的情况下,它会导致线程泄漏。每次刷新都会增加一个线程

我通过url加载数据,所以我的刷新部分看起来像:

$('#groupTree').jstree(true).settings.core.data.url = get_group_url();
  1. $('#YourJSTREE').jstree("destroy").empty();
  2. 设置新数据
  3. $('#YourJSTREE').jstree(true).refresh();

最新更新