我一直在拼凑一个函数,为不同的节点组合一个自定义上下文菜单。好吧,到目前为止,很好地获得了不同的标签以显示文件夹或文件的点击,但实际上没有那么多删除它们。
看一看。我不得不......做一些hacky解决方法因为我无法使node.hasClass(' jstree-open')yada yada工作正常,但这通常会起作用到那个应该删除
的位function customMenu(node) {
//Show a different label for renaming files and folders
var ID = $(node).attr('id');
if (ID == "j1_1") {
return items = {}; //no context menu for the root
}
var $mynode = $('#' + ID);
var renameLabel;
var deleteLabel;
var folder = false;
if ($mynode.hasClass("jstree-closed") || $mynode.hasClass("jstree-open")) { //If node is a folder
renameLabel = "Rename Folder";
deleteLabel = "Delete Folder";
folder = true;
}
else {
renameLabel = "Rename File";
deleteLabel = "Delete File";
}
var items = {
"rename" : {
"label" : renameLabel,
"action": function (obj) {
//nothing here yet.
}
},
"delete" : {
"label" : deleteLabel,
"action": function (obj) {
//tree.delete_node($(node));
//this.remove(obj);
//$('#treeView').jstree('remove', $(node));
//nothing is working.
}
}
};
return items;
}
为方便起见,我为小提琴做了一个小提琴:http://jsfiddle.net/dpzy8xjb/ 我不认为我真的需要说我没有超级经验的jQuery或处理第三方API,所以......要温柔。
答案 0 :(得分:2)
请使用tree.delete_node([node]);
进行删除。
修改强>
您所做的代码与node
相同。
var ID = $(node).attr('id');
var $mynode = $('#' + ID);
它是同一个对象节点。
答案 1 :(得分:1)
我向上帝发誓,除了在StackOverflow上发布问题之外,没有任何事情可以让我更快地找出问题。
修正:
"delete": {
"label": deleteLabel,
"action": function (obj) {
//tree.delete_node($(node));
tree.delete_node($mynode); //<<--works.
}
答案 2 :(得分:0)
我遇到了这个问题,所有的解决方案均无效。正如文档所述:
禁止对树的所有修改(创建,重命名,移动,删除)。要启用它们,请将core.check_callback设置为true。
就我而言,我有一个check_callback函数(我正在使用拖放),该函数在删除节点时返回false
。
我已经将它调整为“ delete_node”:
check_callback: function(operation, node, parent, position){
if(operation == 'delete_node'){
return true;
}
// ... rest of the code
}
答案 3 :(得分:0)
除非将core.check_callback
设置为true
,否则无法删除节点。