您好,登錄后才能下訂單哦!
zTree 簡(jiǎn)介
zTree 是一個(gè)依靠 jQuery 實(shí)現(xiàn)的多功能 “樹(shù)插件”。優(yōu)異的性能、靈活的配置、多種功能的組合是 zTree 最大優(yōu)點(diǎn)。
zTree 是開(kāi)源免費(fèi)的軟件(MIT 許可證)。如果您對(duì) zTree 感興趣或者愿意資助 zTree 繼續(xù)發(fā)展下去,可以進(jìn)行捐助。
原始問(wèn)題
//添加結(jié)點(diǎn), 產(chǎn)品和版本 function addNode(event) { rMenu.css({ "visibility": "hidden" }); var treeNode = zTree.getSelectedNodes()[0]; var pid; var nodeName; var treelevel; if (!treeNode && event.target.tagName.toLowerCase() != "button" && $(event.target).parents("a").length == 0) { //添加產(chǎn)品結(jié)點(diǎn) pid = 0; treeNode = null; treelevel = 1; } else if (treeNode) { //添加版本結(jié)點(diǎn) pid = treeNode.id; treelevel = 2; } $.post( "AddNode.action", { type: treelevel, id: pid }, function(nodeIdAndName) { var params = /([^\|]+)\|([^\|]+)/.exec(nodeIdAndName); if (!((!treeNode && event.target.tagName.toLowerCase() != "button" && $(event.target).parents("a").length == 0) || treeNode.open)) { zTree.expandNode(treeNode, true); } treeNode = zTree.addNodes(treeNode, { id: params[1], pid: pid, isParent: "true", name: params[2], editable: "true", treelevel: treelevel }); }); }
原本直接添加子節(jié)點(diǎn)的時(shí)候,如果父節(jié)點(diǎn)沒(méi)有展開(kāi),會(huì)添加兩個(gè)一樣的子節(jié)點(diǎn)(第一次的時(shí)候);后來(lái)我對(duì)父節(jié)點(diǎn)是否展開(kāi)進(jìn)行了判斷,但是卻變成了如果父節(jié)點(diǎn)展開(kāi),會(huì)添加兩個(gè)一樣的子節(jié)點(diǎn)(第一次的時(shí)候),這個(gè)問(wèn)題要怎么解決呢?
辦法一
將
if (!((!treeNode && event.target.tagName.toLowerCase() != "button" && $(event.target).parents("a").length == 0) || treeNode.open)) { zTree.expandNode(treeNode, true); } treeNode = zTree.addNodes(treeNode, { id: params[1], pid: pid, isParent: "true", name: params[2], editable: "true", treelevel: treelevel });
改成
if(!treeNode && event.target.tagName.toLowerCase() != "button" && $(event.target).parents("a").length == 0) { treeNode = zTree.addNodes(treeNode, { id: params[1], pid: pid, isParent: "true", name: params[2], editable: "true", treelevel: treelevel }); } else if(treeNode.open) { if(treeNode.isParent) { zTree.reAsyncChildNodes(treeNode, "refresh"); } else { treeNode.isParent=true; zTree.reAsyncChildNodes(treeNode, "refresh"); } } else { zTree.expandNode(treeNode, true); treeNode = zTree.addNodes(treeNode, { id: params[1], pid: pid, isParent: "true", name: params[2], editable: "true", treelevel: treelevel }); }
問(wèn)題就可以解決了,但是有沒(méi)有優(yōu)化呢?感覺(jué)改后的代碼分類太多了
最優(yōu)辦法
貌似不用這么麻煩吧?前兩天回答了類似的問(wèn)題。
1、點(diǎn)擊添加子節(jié)點(diǎn)后,就直接 ajax 傳給后臺(tái)保存數(shù)據(jù),捕獲 success 事件
2、ajax success 時(shí),利用 treeNode.zAsync 屬性就可以知道此父節(jié)點(diǎn)是否進(jìn)行過(guò)異步加載,如果為 false 那么直接 reAsyncChildNodes 刷新, 如果為 true 那么利用 addN...
if ((!treeNode && event.target.tagName.toLowerCase() != "button" && $(event.target).parents("a").length == 0) || treeNode.zAsync) treeNode = zTree.addNodes(treeNode, { id: params[1], pid: pid, isParent: "true", name: params[2], editable: "true", treelevel: treelevel }); else zTree.reAsyncChildNodes(treeNode, "refresh");
總結(jié)
以上所述是小編給大家介紹的jQuery zTree 異步加載添加子節(jié)點(diǎn)重復(fù)問(wèn)題,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)億速云網(wǎng)站的支持!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。