1

我必须只显示选定的节点和父节点,并在单击按钮时隐藏其余节点。当我点击按钮时,什么也没有发生。

jsfiddle

http://jsfiddle.net/375emow0/

带有注释的代码开始按钮单击
$('button[name="psychTree-selected"]').click( function(node) {

get the selected nodes
nodesSelected = $('#psychTree').tree('getSelectedNodes');

create an array for shown nodes
nodeIdsToStay = [];

walk through selected nodes
nodesSelected.forEach( function(node) {
var path = $('#psychTree').tree('getData');
path.forEach(function(n) {
if (nodeIdsToStay.indexOf(n)===-1) {
nodeIdsToStay.push(n);
}
})
})

hide the nodes not in the array
$('#psychTree').find('li').each( function(){
if ( nodeIdsToStay.indexOf(this.id) === -1 ) {
$(this).hide();
}
})
})

我知道如何隐藏选定的节点,但显然非选定节点没有可识别的类供我搜索和隐藏http://jsfiddle.net/tom1nkfr/

`$('button[name="psychTree-selected"]').click( function() {`
`$('#psychTree').find('.jqtree-selected').each( function(){`
`$(this).hide();`
`})`
`})`
4

1 回答 1

0

我推荐一种更简单的方法 - 看起来您正在尝试查找所有被选中的节点,将它们推送到 中array,然后遍历整个 jsTree 并隐藏不在array您创建的节点中的任何节点。相反,利用 jsTree 已经应用于选定节点的 CSS 类,并隐藏所有没有它的 CSS 类。

简化的 JS:

$('button[name="psychTree-selected"]').click(function() {
  $('#psychTree li.jqtree_common').each(function(index,elem){
    if(!$(elem).hasClass('jqtree-folder') && !$(elem).hasClass('jqtree-selected')){
        $(elem).hide();
    }
  });
})

仍然在您的按钮单击时触发,但现在它遍历所有树节点并隐藏任何 (1) 未选择和 (2) 非父/文件夹节点。

工作 JSFiddle:http: //jsfiddle.net/tbwjau5m/

于 2018-11-11T00:20:07.223 回答