如何仅针对超出2级的节点打开jsTree上下文菜单?

时间:2016-10-05 14:46:31

标签: javascript jquery jstree

所以我的问题是我需要在我的树的节点上设置contextmenu,它们嵌套在第二级或更深层之后。例如:

enter image description here

我希望节点上有默认的上下文菜单" 1.1.1"," 1.1.1.1"等...但是我不希望这个上下文菜单出现当我右键点击" 1"或" 1.1"。

我应该如何选择出现哪些节点而不是哪个节点?

我找到了一些像这样的例子:

function customMenu(node) {
   //Show a different label for renaming files and folders
   if ($(node).hasClass("jstree-closed") || $(node).hasClass("jstree-open")) { //If node is a folder
      var renameLabel = "Rename Folder";
   }
   else {
      var renameLabel = "Rename File";
   }
   var items = {
      "upload" : {
          "label" : "Upload File",
          "action" : function () { ... }
      },
      "rename" : {
         "label" : renameLabel,   //Different label (defined above) will be shown depending on node type
         "action" : function () { ... }
      },
      "delete" : {
         "label" : "Delete File",
         "action" : function () { ... }
      }
   };

   //If node is a folder do not show the "delete" menu item
   if ($(node).hasClass("jstree-closed") || $(node).hasClass("jstree-open")) {
      delete items.remove;
   }

   return items;
}

我需要这样的东西,但我不知道如何检查我的文件夹嵌套在哪个级别。我的示例中的检查是针对"文件夹或文件"。

有人有线索吗?

1 个答案:

答案 0 :(得分:3)

我不认为jsTree有一个开箱即用的方法,因此您可以使用以下代码抑制显示1级和2级节点的菜单。查看演示 - Fiddle Demo

.on('show_contextmenu.jstree', function(e, reference, element) {

    if ( reference.node.parents.length < 3 ) {
        $('.vakata-context').remove();
    }

});