jsTree很棒,但它的文檔相當密集。我最終弄明白了,所以這裏是任何人跑到這個線程的解決方案。
首先,您需要將open_node事件綁定到相關樹。東西沿線
$("tree").jstree({"themes":objTheme,"plugins":arrPlugins,"core":objCore}).
bind("open_node.jstree",function(event,data){closeOld(data)});
即您配置treeview實例,然後綁定open_node事件。在這裏,我調用closeOld函數來完成我需要的工作 - 關閉任何可能打開的其他節點。功能如下
function closeOld(data)
{
var nn = data.rslt.obj;
var thisLvl = nn;
var levels = new Array();
var iex = 0;
while (-1 != thisLvl)
{
levels.push(thisLvl);
thisLvl = data.inst._get_parent(thisLvl);
iex++;
}
if (0 < ignoreExp)
{
ignoreExp--;
return;
}
$("#divElements").jstree("close_all");
ignoreExp = iex;
var len = levels.length - 1;
for (var i=len;i >=0;i--) $('#divElements').jstree('open_node',levels[i]);
}
這將正確處理所有其他節點的摺疊,而不管剛剛擴展的節點的嵌套級別。
的步驟簡要說明參與
- 首先,我們退一步了樹形視圖,直到我們達到一個頂級節點(-1 jstree說吧)確保我們在錄製過程中遇到的所有祖先節點在陣列水平
- 接下來,我們摺疊所有在TreeView
- 我們現在要重新展開所有nodees在水平陣列的節點。雖然這樣做,我們不希望此代碼再次執行。爲了阻止這種情況發生,我們設置全局ignoreEx變量節點的數量水平
- 最後,我們在水平通過節點步驟,擴大它們中的每一個