Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jstree delete_node()未删除_Javascript_Jquery_Jstree - Fatal编程技术网

Javascript jstree delete_node()未删除

Javascript jstree delete_node()未删除,javascript,jquery,jstree,Javascript,Jquery,Jstree,我一直在拼凑一个函数,为不同的节点拼凑一个自定义上下文菜单。好吧,到目前为止,在点击文件夹或文件时显示不同的标签是很好的,但在实际删除文件夹或文件时却不是很好 看一看。我不得不。。。因为我无法让node.hasClass('jstree-open')yada-yada正常工作,所以需要做一点简单的变通,但这通常是为了完成删除操作 function customMenu(node) { //Show a different label for renaming files

我一直在拼凑一个函数,为不同的节点拼凑一个自定义上下文菜单。好吧,到目前为止,在点击文件夹或文件时显示不同的标签是很好的,但在实际删除文件夹或文件时却不是很好

看一看。我不得不。。。因为我无法让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;
        }
为了方便您,我准备了一把小提琴:
我不认为真的需要说我在jQuery或处理第三方API方面不是很有经验,所以。。。温柔点

我向上帝发誓,没有什么比在StackOverflow上发布问题更能促使我更快地解决问题了

固定的:

       "delete": {
            "label": deleteLabel,
                "action": function (obj) {
                //tree.delete_node($(node));
                tree.delete_node($mynode); //<<--works.
        }
“删除”:{
“标签”:删除标签,
“行动”:功能(obj){
//删除_节点($(节点));

tree.delete_节点($mynode);//请使用
tree.delete_节点([node]);
进行删除

编辑:

您执行的代码与
节点
相同

        var ID = $(node).attr('id');
        var $mynode = $('#' + ID);

它是同一个对象节点。

我遇到了这个问题,但没有一个解决方案有效。正如文档所述:

阻止对树的所有修改(创建、重命名、移动、删除)。若要启用这些修改,请将core.check\u callback设置为true

在我的例子中,我有一个check_回调函数(我使用拖放),在删除节点时返回
false

我已将其调整为“删除节点”,如下所示:

check_callback: function(operation, node, parent, position){
        if(operation == 'delete_node'){
            return true;
        }
        // ... rest of the code

}

除非
core,否则无法删除节点。check_callback
设置为
true

使用JSTree可以获得很多乐趣。我使用AJAX加载所需的节点。我发现最简单的删除方法是调用AJAX删除服务器上的节点,然后使用回调刷新JSTree中的父节点如果删除成功。这确保了我的树和服务器上的原始数据之间的同步。先生,@HoboSapiens非常方便。因此,这个jstree也使用AJAX动态加载其数据;如果用户确认删除,我正计划进行AJAX调用以删除服务器上的文件/文件夹,然后删除服务器上的节点前端,但这个解决方案听起来没有我想象的那么糟糕!!嘿。@takiMartillo,如果它对你有帮助,请进行投票。@Janty我不知道这个网站的具体情况,但这是一个相当普遍接受的概念,你不会乞求人们进行投票。你是对的:)…@takiMartillo那是什么
[node]
您正在使用的业务?我以前从未见过。它与我使用的
$mynode
变量有何不同?您正在使用上下文菜单进行删除,因此它是作为要删除的当前节点传递给上下文参数的节点。啊,我知道您在那里做了什么。我不太熟悉这个插件的精确语法。它的API是not…在大多数情况下信息量很大,很难理解。是的,我找到了那个人,我的解决方案也很有效。我试图让你解释清楚你在那里做了什么。你为$mynode设置了什么?我的意思是它的值吗?请参阅我的编辑回答。你正在查找id和它的对象。这两行就像只传递了node一样。嗯,我这样做是因为当我刚刚说$(node).hasClass(…)…时,它不起作用。也许我可以用[node]来代替。我会尝试一下,谢谢!