zTree removeNode 方法的问题,通过copyNode复制的节点无法成功删除
通过上面的方法添加了自定义控件,点击添加按钮时执行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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
注意两个关键问题: 1、使用 zTree 方法处理节点时,一定要保证该节点数据是 zTree 内部的节点 数据, 所以一般用 getNode...等方法获取是最合适的 2、注意函数中操作的对象。。。回调给你传入了 treeNode ,可是你在里面又把 treeNode 变成了一个新的对象。。。这样就导致后面的操作使用了一个非 zTree 内部的节点数据对象,从而操作失败
回复
哦 zTree对象操作treeNode的时候用到了哪些关键属性 保证那些属性不变可以吗
回复
不行, 调用 zTree 方法操作节点时, treeNode 必须是 zTree 内的 节点对象,因为是直接 obj === obj 这种方法比较的
回复
O.O 谢谢!懂了
引用来自“zTree”的评论
1. 请记住 copy 后的节点 会clone 出新的 节点 json 数据在 zTree 中! 所以 删除的时候务必要注意!
2. 你所说的刷新是怎么回事儿? 是怎么个刷新? 是后台没有正常删除? 还是前端的节点数据没有正常删除? 理论上用 removeNode 方法删除节点的话,肯定会被删除的
您好!感谢回答我的问题!! 刷新是通过zTree api refresh() 刷新的 不用copy 删除是正常的,使用copy复制的节点 第一次删除不成功,refresh()后会显示回来 会不会是我执行那个extend函数的问题
1. 请记住 copy 后的节点 会clone 出新的 节点 json 数据在 zTree 中! 所以 删除的时候务必要注意!
2. 你所说的刷新是怎么回事儿? 是怎么个刷新? 是后台没有正常删除? 还是前端的节点数据没有正常删除? 理论上用 removeNode 方法删除节点的话,肯定会被删除的