jQuery zTree 異步加載添加子節(jié)點(diǎn)重復(fù)問(wèn)題
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)行捐助。
- zTree v3.0 將核心代碼按照功能進(jìn)行了分割,不需要的代碼可以不用加載
- 采用了 延遲加載 技術(shù),上萬(wàn)節(jié)點(diǎn)輕松加載,即使在 IE6 下也能基本做到秒殺
- 兼容 IE、FireFox、Chrome、Opera、Safari 等瀏覽器
- 支持 JSON 數(shù)據(jù)
- 支持靜態(tài) 和 Ajax 異步加載節(jié)點(diǎn)數(shù)據(jù)
- 支持任意更換皮膚 / 自定義圖標(biāo)(依靠css)
- 支持極其靈活的 checkbox 或 radio 選擇功能
- 提供多種事件響應(yīng)回調(diào)
- 靈活的編輯(增/刪/改/查)功能,可隨意拖拽節(jié)點(diǎn),還可以多節(jié)點(diǎn)拖拽喲
- 在一個(gè)頁(yè)面內(nèi)可同時(shí)生成多個(gè) Tree 實(shí)例
- 簡(jiǎn)單的參數(shù)配置實(shí)現(xià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é)改后的代碼分類(lèi)太多了
最優(yōu)辦法
貌似不用這么麻煩吧?前兩天回答了類(lèi)似的問(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)站的支持!
- 基于jQuery ztree實(shí)現(xiàn)表格風(fēng)格的樹(shù)狀結(jié)構(gòu)
- jQuery 利用ztree實(shí)現(xiàn)樹(shù)形表格的實(shí)例代碼
- zTree jQuery 樹(shù)插件的使用(實(shí)例講解)
- jQuery使用zTree插件實(shí)現(xiàn)可拖拽的樹(shù)示例
- jQuery EasyUI結(jié)合zTree樹(shù)形結(jié)構(gòu)制作web頁(yè)面
- jQuery zTree樹(shù)插件動(dòng)態(tài)加載實(shí)例代碼
- jQuery插件zTree實(shí)現(xiàn)的多選樹(shù)效果示例
- jQuery zTree如何改變指定節(jié)點(diǎn)文本樣式
相關(guān)文章
jquery實(shí)現(xiàn)的隨機(jī)多彩tag標(biāo)簽隨機(jī)顏色和字號(hào)大小效果
這篇文章主要介紹了jquery實(shí)現(xiàn)的隨機(jī)多彩tag標(biāo)簽隨機(jī)顏色和字號(hào)大小效果,需要的朋友可以參考下2014-03-03
jQuery插件echarts設(shè)置折線圖中折線線條顏色和折線點(diǎn)顏色的方法
這篇文章主要介紹了jQuery插件echarts設(shè)置折線圖中折線線條顏色和折線點(diǎn)顏色的方法,結(jié)合實(shí)例形式分析了jQuery圖表插件echarts設(shè)置折線圖的相關(guān)操作技巧,需要的朋友可以參考下2017-03-03
js/jquery判斷瀏覽器類(lèi)型的方法小結(jié)
有些時(shí)候需要根據(jù)瀏覽器來(lái)寫(xiě)樣式,所以要判斷一下瀏覽器類(lèi)型,百度了一下,才知道JQuery有個(gè)方法直接判斷,并附上原生的js的判斷方法,分享給大家,有需要的小伙伴可以參考下。2015-05-05
jquery增加時(shí)編輯jqGrid(實(shí)例代碼)
jquery增加時(shí)編輯jqGrid(實(shí)例代碼)。需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助2013-11-11
jquery實(shí)現(xiàn)簡(jiǎn)單拖拽效果
這篇文章主要為大家詳細(xì)介紹了jquery實(shí)現(xiàn)簡(jiǎn)單拖拽效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-07-07
easyUI使用分頁(yè)過(guò)濾器對(duì)數(shù)據(jù)進(jìn)行分頁(yè)操作實(shí)例分析
這篇文章主要介紹了easyUI使用分頁(yè)過(guò)濾器對(duì)數(shù)據(jù)進(jìn)行分頁(yè)操作,結(jié)合實(shí)例形式詳細(xì)分析了easyUI分頁(yè)過(guò)濾器對(duì)數(shù)據(jù)進(jìn)行分頁(yè)操作具體步驟與相關(guān)操作技巧,需要的朋友可以參考下2020-06-06
淺談jquery選擇器 :first與:first-child的區(qū)別
下面小編就為大家?guī)?lái)一篇淺談jquery選擇器 :first與:first-child的區(qū)別。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-11-11
jQuery點(diǎn)擊出現(xiàn)愛(ài)心特效
這篇文章主要為大家詳細(xì)介紹了jQuery點(diǎn)擊出現(xiàn)愛(ài)心特效,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08

