在jstree中仅显示已检查的节点及其父节点

时间:2016-03-08 12:52:55

标签: jstree

我必须只显示选定的节点和父节点,并隐藏休息节点。

当前文档中没有get_unchecked。我的json格式很大,所以把它放在字符串中,格式化和重新加载树将是低效的。

有没有办法获取所有未经检查的节点并隐藏它? 如果有,我可以检查当前已检查节点的所有父节点,然后只是隐藏所有未经检查的节点,但我找不到任何方法来检索所有未检查的节点。

3 个答案:

答案 0 :(得分:1)

您可以通过以下方式完成:

  1. 将所有选定的节点与父母一起获取
  2. 遍历所有节点并查看是否未选择节点,然后将其隐藏
  3. 检查以下代码并演示 - codepen

    var $tree = $("#myTree").jstree(),
        nodesSelected = $('#myTree').jstree('get_checked', true),
        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();
        }
    })
    

答案 1 :(得分: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步:隐藏所选节点

答案 2 :(得分:0)

根据上面的响应,我能够创建此函数,该函数根据节点属性值过滤Treeview。 (替换“

$('#jstree').find('li').each(function () {
    if ($("#" + this.id).attr("tag") == "<MYTAG>") {
        $(this).hide();
    }
    else {
        $(this).show();
    }
})