希望這能幫助和抱歉,我沒有使用JSON。我將jstree與函數一起使用,通過單擊jstree html外部的元素來打開節點。
我們設置中的每個節點都像一個網頁,所以在儀表板的主頁上我們有最近編輯過的頁面列表。
每這些鏈接的
有這個JavaScript的執行
<a href="javascript: selectLeftNavNode(339);">Edit</a>
,其中339是我們要編輯
頁的ID,這是用來執行
function selectLeftNavNode(node) {
$('#demo').jstree('deselect_all');
$('#demo').jstree('select_node', '#node_' + node);
}
FHE功能
我們最近注意到的問題是,如果最近編輯的頁面在樹中更深處,更具體地在尚未加載的段中,則將失敗
這就是爲什麼我決定把AJAX請求到服務器,以便檢索所有父ID的
改下面的代碼,在我的情況下,阿賈克斯將返回這樣的事情找XML
<?xml version="1.0" encoding="UTF-8"?>
<response>
<paths>
<path>339</path>
<path>338</path>
<path>38</path>
</paths>
</response>
和功能
function selectLeftNavNode(node) {
$('#demo').jstree('deselect_all');
if($('#demo').jstree('select_node', '#node_' + node) === false)
{
// if it is false means that the node is not yet rendered
// so instead of loading we will require to get list of parent nodes to open in order, then it will become available
// an ajax call should get us all the nodes
$.ajax({
type: "POST",
dataType: "xml",
url: your_url_to_php_script',
data: {node_id:node},
success: function(data)
{
var remaining_nodes = new Array();
var paths_count = $(data).find('response').find('path').length;
for(var x=1;x<=paths_count;x++){
remaining_nodes[x-1] = $(data).find('response').find('paths path:nth-child('+x+')').text();
}
open_nodes_step_by_step(remaining_nodes);
}
});
}
}
和在除了其通過環繞在從open_node回調的函數,該函數通過節點打開節點和當它擊中噸他最後一項,應該是我們要選擇它將使用select_node實際節點ID而不是
function open_nodes_step_by_step(remaining_nodes)
{
var nodes = remaining_nodes.slice();
tree = jQuery.jstree._focused();
if(nodes.length > 1){
var nodes_left = remaining_nodes.slice();
nodes_left.pop();
var to_open = nodes.length - 1;
tree.open_node(document.getElementById('node_' + nodes[to_open]), /*CALLBACK*/ function() {
open_nodes_step_by_step(nodes_left);
});
}
else{
tree.select_node('#node_' + nodes[0]);
}
}
我已經測試了我的IE8,FF和鉻一切似乎工作得很好,在我之上的解決方案使用jQuery v1.10.1和jsTree 1.0-rc1(不幸的是,代碼已經存在多年了,它擁有所有數據庫和其他集成,我決定不更改爲新版本,它的工作原理)
希望我幫助過有人
湯姆