国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

jQuery zTree 異步加載添加子節點重復問題

2019-11-19 14:49:13
字體:
來源:轉載
供稿:網友

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 異步加載添加子節點重復問題,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 吉首市| 那曲县| 白玉县| 涞水县| 城固县| 阿拉善右旗| 方正县| 石嘴山市| 色达县| 庆阳市| 芦溪县| 合江县| 墨竹工卡县| 云浮市| 滨海县| 东阳市| 南开区| 宁强县| 聊城市| 蛟河市| 雅江县| 乐安县| 石河子市| 陈巴尔虎旗| 鹰潭市| 勐海县| 宣武区| 繁昌县| 同德县| 根河市| 泾源县| 前郭尔| 元谋县| 遵义市| 嘉善县| 芦溪县| 莱芜市| 灵寿县| 通化市| 平乡县| 壶关县|