2016-03-08 105 views
0

我只能顯示選定的節點和父母,並隱藏其餘節點。只顯示在jstree中檢查過的節點及其父母

當前文檔中沒有get_unchecked。我的json格式非常龐大,因此將其用於字符串和格式化並重新加載樹會效率低下。

有沒有辦法讓所有未經檢查的節點和隱藏它? 如果有我可以檢查當前選中的節點的所有父節點,然後隱藏所有未經檢查的節點,但我找不到任何方法來檢索所有未經檢查的節點。

回答

1

解決我所提出的問題。

$('#jstree_demo_div').on('loaded.jstree', function(e, data) { 
    console.log("loaded"); 
    checked_ids = $('#jstree_demo_div').jstree('get_selected', true); 
    $("#jstree_demo_div").jstree('select_all'); 
    $.each(checked_ids, function(index, value) { 
    $("#jstree_demo_div").jstree('deselect_node', value); 
    uiParentsShow(value); 
    }); 
    checked_ids = $('#jstree_demo_div').jstree('get_selected', true); 
    $.each(checked_ids, function(index, value) { 
    $("#jstree_demo_div").jstree('hide_node', value); 

    }); 
}); 

function uiParentsShow(node) { 
    try { 
    var parent = $("#jstree_demo_div").jstree('get_parent', node); 
    $("#jstree_demo_div").jstree('deselect_node', parent); 
    if (parent != '#') { 
     uiParentsShow1(parent); 
    } 
    } catch (err) { 
    console.log('Error in uiGetParents' + err); 
    } 
} 

步驟:

  • 步驟1:選擇所有的元素
  • 步驟2:取消選擇被檢查的節點和檢查節點的父
  • 步驟3:隱藏選定的節點
0

你可以做到這一點:

  1. 獲得與父母
  2. 會在所有節點,看到沿着所有選擇的節點,如果沒有選擇節點,則隱藏它

檢查下面的代碼和演示 - codepen

var $tree = $("#myTree").jstree(), 
    nodesSelected = $tree.get_selected(), 
    nodeIdsToStay = []; 

nodesSelected.forEach(function(node) { 
    var path = $tree.get_path(node, false, true); 
    path.forEach(function(n) { 
     if (nodeIdsToStay.indexOf(n) === -1) { 
      nodeIdsToStay.push(n); 
     } 
    }) 
}) 

$('#myTree').find('li').each(function() { 
    if (nodeIdsToStay.indexOf(this.id) === -1) { 
     $(this).hide(); 
    } 
}) 
+0

不適用於我的數據集。它真的很長,我怎麼發送你的數據集 –

+0

什麼不工作? –

+0

它顯示了一些兄弟節點。如果你想要的話,我可以把你的jsondata郵寄給你,而且我現在也必須在運行時隱藏複選框圖標。 –

相關問題