我用以下代码创建了一个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();
$('#YourJSTREE').jstree("destroy").empty();
- 设置新数据
$('#YourJSTREE').jstree(true).refresh();