成人精品一区二区三区中文字幕-成人精品一区二区三区-成人精品一级毛片-成人精品亚洲-日本在线视频一区二区-日本在线视频免费

導航首頁 ? 技術教程 ? jQuery zTree 異步加載添加子節點重復問題
全站頭部文字 我要出現在這里
jQuery zTree 異步加載添加子節點重復問題 655 2024-03-24   

zTree 簡介

zTree 是一個依靠 jQuery 實現的多功能 “樹插件”。優異的性能、靈活的配置、多種功能的組合是 zTree 最大優點。

zTree 是開源免費的軟件(MIT 許可證)。如果您對 zTree 感興趣或者愿意資助 zTree 繼續發展下去,可以進行捐助。

zTree v3.0 將核心代碼按照功能進行了分割,不需要的代碼可以不用加載 采用了 延遲加載 技術,上萬節點輕松加載,即使在 IE6 下也能基本做到秒殺 兼容 IE、FireFox、Chrome、Opera、Safari 等瀏覽器 支持 JSON 數據 支持靜態 和 Ajax 異步加載節點數據 支持任意更換皮膚 / 自定義圖標(依靠css) 支持極其靈活的 checkbox 或 radio 選擇功能 提供多種事件響應回調 靈活的編輯(增/刪/改/查)功能,可隨意拖拽節點,還可以多節點拖拽喲 在一個頁面內可同時生成多個 Tree 實例 簡單的參數配置實現 靈活多變的功能

原始問題

//添加結點, 產品和版本
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) {
   //添加產品結點
pid = 0;
   treeNode = null;
   treelevel = 1;
  } else if (treeNode) {
   //添加版本結點
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 });
   });
}

原本直接添加子節點的時候,如果父節點沒有展開,會添加兩個一樣的子節點(第一次的時候);后來我對父節點是否展開進行了判斷,但是卻變成了如果父節點展開,會添加兩個一樣的子節點(第一次的時候),這個問題要怎么解決呢?

辦法一

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 });
    }

問題就可以解決了,但是有沒有優化呢?感覺改后的代碼分類太多了

最優辦法

貌似不用這么麻煩吧?前兩天回答了類似的問題。

1、點擊添加子節點后,就直接 ajax 傳給后臺保存數據,捕獲 success 事件

2、ajax success 時,利用 treeNode.zAsync 屬性就可以知道此父節點是否進行過異步加載,如果為 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");

總結

以上所述是小編給大家介紹的jQuery zTree 異步加載添加子節點重復問題,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對綠夏網網站的支持!



主站蜘蛛池模板: 欧美乱淫av片免费黑鬼| 查宁·塔图姆| 夜半2点钟| 潘馨| 不跟陌生人走教案| 男人天堂视频| 刘思维| 许华升公个人资料身高多少| 柏欣彤广场舞| 双生儿| 一夜风流| 夜生活女王| 笼中女电影| 少女模特 电影| 六年级下册语文文言文二则| 三年片最新电影免费观看多人互换| 山东生活频道| 金珠主演电影韩剧| 刀郎歌曲简谱| 衣女裸体男 waxing| 谭咏麟个人资料简介| 土壤动植物的乐园教学反思| 熊欣欣个人资料| 欧美黑人巨大精品videos| 吴青芸| 密探| 包天笑| 误杀2电影免费观看高清完整版| 陈澎| 手机图标大全| 刘峥| 地球球花 电影| 二十以内加减法口诀表| 迷失美剧| 消防给水及消火栓系统技术规范| 红海行动2虎鲸行动在线播放国语| 沙鲁克汗| 玫瑰情人| 七龙珠2| 大开眼戒在线观看| 爱之梦钢琴谱|

!!!站長長期在線接!!!

網站、小程序:定制開發/二次開發/仿制開發等

各種疑難雜癥解決/定制接口/定制采集等

站長微信:lxwl520520

站長QQ:1737366103