2016-03-08 50 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邮寄给你,而且我现在也必须在运行时隐藏复选框图标。 –

相关问题