2014-07-21 137 views
2

我有一個包含文件夾對象列表的標準jstree。用戶能夠對文件夾的名稱進行基本搜索,並且我想要隱藏與搜索不匹配的所有文件夾。一切工作正常,直到我需要實際隱藏不匹配的節點的部分。隱藏JSTree中的特定節點

//Iterate through all elements of the tree. 
var xmlString = $("#standardTree").jstree("get_xml"); 
var xmlDOM = $.parseXML(xmlString); 
var items = $(xmlDOM).find("root item"); 

$.each(items, function (key, item) { 
    //If a node's text doesn't match the search, hide that node. 
    if ($(item).text() != result.searchString) { 

      //**Not sure what to do here, this doesn't work.** 
      $(item).hide(); 
    } 
}); 
+0

使用$(本).hide代替。 –

+0

在這種情況下,我可能是錯的,但不是$(this).hide()與$(item).hide()完全相同嗎? – Blankdud

回答

0

我找到了我的解決方案。

通過嘗試使用$(item).hide(),我試圖隱藏對象本身。我必須先得到li元素,然後我才能隱藏它,沒有任何問題。

$.each(items, function (key, item) { 
    var treeNode = document.getElementById($(item).attr("id")); 

    if ($(item).text() != result.searchString) { 
     $(treeNode).hide(); 
    } 
}); 
0

由於jstree 3.2.0也可以使用hide_node來隱藏節點。這意味着節點在重繪後仍然會隱藏。

$("#tree").jstree(true).hide_node(treeNode); 
1

這個工作對我來說

var isFiltered = false; 
function filter() { 
    isFiltered = !isFiltered;  
    var filterText = document.getElementById("newParent").value; 
    var $tree = $('#jstree'); 
    $($tree.jstree().get_json($tree, { 
      flat: true 
     })) 
     .each(function(index, value) { 
      var node = $("#jstree").jstree().get_node(this.id);   
      if (isFiltered && !node.text.includes(filterText)) 
      $("#jstree").jstree(true).hide_node(node); 
     else 
      $("#jstree").jstree(true).show_node(node); 

    }); 
}