在 jstree 中仅显示选中的节点及其父节点

Show only checked nodes and parents of it in jstree

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

当前文档中没有get_unchecked。我的 json 格式很大,所以将其放入字符串中并格式化和重新加载树将效率低下。

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

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

  1. 获取所有选定的节点以及父节点
  2. 遍历所有节点,查看是否有节点未被选中,然后将其隐藏

检查下面的代码和演示 - 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();
    }
})

解决我提出的问题。

$('#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 步:隐藏选定节点

根据上面的响应,我能够创建这个函数来根据节点属性值过滤 Treeview。 (代替 '

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