zTree removeNode 方法的问题,通过copyNode复制的节点无法成功删除

发布于 2021-11-23 00:21:08 字数 2183 浏览 844 评论 7

通过上面的方法添加了自定义控件,点击添加按钮时执行copyNode 成功拷贝节点,然后再点新节点的删除 调用removeNode 第一次无法删除,调试的时候看到 执行完 removeNode 后节点消失, 刷新后又回来了, 再次删除就成功了

function addDiyDom(treeId, treeNode) {
		
		    var node = $("#"+treeNode.tId+"_a");
		    
		    //加入所有自定义属性和默认值
		    var treeNode = $.extend({},nodeDefProperty,treeNode);
		    
		    /**节点描述信息**/
		    var addStr = "<span class='inputDescription'>"+treeNode.inputDescription+"</span>";
            node.after(addStr);
            //子节点可继续添加
		    if(treeNode.canAddChildren){
		        var addStr = "<span class='button add' id='addBtn_" + treeNode.tId
                + "' title='add node' onfocus='this.blur();'></span>";
                node.after(addStr);
                var btn = $("#addBtn_"+treeNode.tId);
                if (btn) btn.bind("click", function(){
                    var zTree = $.fn.zTree.getZTreeObj(treeId);
                    zTree.copyNode(treeNode.children[0],treeNode.children[0],"prev",true );
                    return false; 
                });
		    }
		    //节点可被删除
		    if(treeNode.canRemove){
		        var removeStr = "<span class='button remove' id='removeBtn_" + treeNode.tId
                + "' title='remove node' onfocus='this.blur();'></span>";
                node.after(removeStr);
                var btn = $("#removeBtn_"+treeNode.tId);
                if (btn) btn.bind("click", function(){
                    //删除有问题 
                    var zTree = $.fn.zTree.getZTreeObj(treeId);
                    if(treeNode.getParentNode().children.length>1)
                    {
                        zTree.removeNode(treeNode);
                        zTree.refresh();
                    }else{
//                        zTree.copyNode(treeNode,treeNode,"prev",false);
//                        zTree.removeNode(treeNode);
                    }
                    
                    return false;
                });
		    }
		    
		    //带有输入框的节点
		    if(treeNode.isInputNode){
		        addInputForNode(treeNode);
		    }
		    
		}




如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

输什么也不输骨气 2021-11-28 00:44:23

注意两个关键问题: 1、使用 zTree 方法处理节点时,一定要保证该节点数据是 zTree 内部的节点 数据, 所以一般用 getNode...等方法获取是最合适的 2、注意函数中操作的对象。。。回调给你传入了 treeNode ,可是你在里面又把 treeNode 变成了一个新的对象。。。这样就导致后面的操作使用了一个非 zTree 内部的节点数据对象,从而操作失败

复古式 2021-11-27 23:42:23

回复
哦 zTree对象操作treeNode的时候用到了哪些关键属性 保证那些属性不变可以吗

冬天旳寂寞 2021-11-27 20:23:10

回复
不行, 调用 zTree 方法操作节点时, treeNode 必须是 zTree 内的 节点对象,因为是直接 obj === obj 这种方法比较的

悲喜皆因你 2021-11-27 11:15:48

回复
O.O 谢谢!懂了

执手闯天涯 2021-11-27 10:35:40

引用来自“zTree”的评论

1. 请记住 copy 后的节点 会clone 出新的 节点 json 数据在 zTree 中! 所以 删除的时候务必要注意!

2. 你所说的刷新是怎么回事儿? 是怎么个刷新?  是后台没有正常删除? 还是前端的节点数据没有正常删除? 理论上用 removeNode 方法删除节点的话,肯定会被删除的

哑剧 2021-11-26 17:29:58

您好!感谢回答我的问题!! 刷新是通过zTree api refresh() 刷新的 不用copy 删除是正常的,使用copy复制的节点 第一次删除不成功,refresh()后会显示回来 会不会是我执行那个extend函数的问题

2021-11-26 14:28:29

1. 请记住 copy 后的节点 会clone 出新的 节点 json 数据在 zTree 中! 所以 删除的时候务必要注意!

2. 你所说的刷新是怎么回事儿? 是怎么个刷新?  是后台没有正常删除? 还是前端的节点数据没有正常删除? 理论上用 removeNode 方法删除节点的话,肯定会被删除的

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文