Skip to main content
 首页 » 编程设计

jquery之在jsTree中如何防止文件夹不为空时被删除

2026年07月28日6itcoder

我有一个由代表图像(而不是文档)的文件夹和文件组成的树。

我试图防止图像被删除,同时允许添加、重命名、移动和删除文件夹。

使用 jsTree 类型我可以防止删除图像,但如果图像位于文件夹内则不能。

如果这些相同的图像位于一个文件夹中,则该文件夹将与所有图像一起删除。

关于如何防止删除非空文件夹(其中包含图像)有什么建议吗?

我尝试在“types”“delete_node”中放置一个函数,但我在识别要删除的文件夹时遇到了困难。我没有运气使用 $(this)。

这是我的最新尝试。尝试在发送 delete_node 之前测试图像 --

.bind("before.jstree", function (e, data) { 
   if(data.func === "delete_node") {   
       if ($(e.currentTarget).find("[rel='imgIR']")){    // rel='imgIR' identifies images 
           alert("Folder must be empty to delete it."); 
           e.stopImmediatePropagation(); 
           return false; 
       } else { 
          return true; 
       } 
    } 
}) 

它的作用是阻止它删除。但它每次都会停止删除,无论有没有图像。

当我将 (e.currentTarget).html() 发送到控制台日志时,整个树都被包含在内,而不仅仅是计划删除的文件夹。我找不到选择特定文件夹的方法。

我使用的插件是:

"plugins" : [ "html_data", "types", "themes", "ui", "crrm", "contextmenu", "dnd" ] 

任何和所有帮助将不胜感激。谢谢!

* 好吧,我取得了一些进展,但又遇到了新的挫折。

使用 Array.prototype.slice.call(arguments, 1) 我终于找到 data.args[0][0] 给了我特定的节点。但现在我从 jquery.jstree.js 第 234 行收到一个错误,我陷入了困境。

错误:未捕获类型错误:Function.prototype.apply:参数列表类型错误

这是我的代码现在的样子。错误出现在 if 语句内部。

.bind("before.jstree", function (e, data) { 
   if(data.func === "delete_node") {  
       var node = data.args[0][0];  
           if ($(node).children('li[rel="imgIR"]').length != 0){    // rel='imgIR' identifies images 
               alert("Folder must be empty to delete it."); 
               e.stopImmediatePropagation(); 
               return false; 
           } else { 
          return true; 
           } 
    } 
}) 

请您参考如下方法:

解决了!

现在我可以在删除文件夹中的图像条目之前对其进行测试。事实上,它可用于在删除文件夹之前测试任何其他元素。

.bind("before.jstree", function (e, data) { 
   if(data.func === "delete_node") {  
       var node = data.args[0][0];  
           if ($(node).find('li[rel="imgIR"]').length != 0){    // rel='imgIR' identifies images 
               alert("Folder must be empty to delete it."); 
               e.stopImmediatePropagation(); 
               return false; 
       }  
   } 
}) 

首先,我将 if 语句更改为 find 而不是 children,因为我需要向下钻取多个级别才能查找图像。当我能够从 if 语句生成真实结果时,我意识到我收到的错误来自 if< 的 }else{} 部分 声明。返回 true; 是导致错误的原因。不需要返回任何内容即可继续删除。

现在它就像一个魅力。