首頁 web前端 js教程 zTree非同步載入時新增子節點總是重複怎麼解決

zTree非同步載入時新增子節點總是重複怎麼解決

Mar 15, 2018 pm 04:20 PM
添加 節點

這次帶給大家zTree非同步載入時新增子節點總是重複怎麼解決,解決zTree非同步載入時加入子節點總是重複的注意事項有哪些,下面就是實戰案例,一起來看一下。

zTree 是一個依靠 jQuery 實現的多功能 「樹插件」。以下透過本文給大家分享jQuery zTree 非同步載入新增子節點重複問題,需要的朋友參考下吧

##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");
登入後複製

相信看了本文案例你已經掌握了方法,更多精彩請關注php中文網其它相關文章!

推薦閱讀:

怎麼發掘空白處隱藏元素


Ajax怎麼實作下拉方塊無刷新聯動


無new建置詳解


#jQuery實作下拉選單導覽

以上是zTree非同步載入時新增子節點總是重複怎麼解決的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

米家怎麼加電視 米家怎麼加電視 Mar 25, 2024 pm 05:00 PM

許多用戶在現代生活中越來越青睞小米智慧家庭互聯的電子生態,那麼連接米家APP後,你就可以輕鬆用手機來控制連接設備,但是很多用戶們還不知如何將自己的家居添加米家app中,那麼這篇教學攻略將為大家帶來具體連接方法步驟攻略,希望能幫助到各位有需要的小夥伴們。 1.下載米家APP後,建立或登入小米帳號。 2.添加方法:當全新的設備通電後,將手機靠近設備並打開小米電視,正常情況下會彈出連接提示,選擇“確定”即進入設備連接流程。若無提示彈出,也可以手動新增設備,方法是:進入智慧型家庭APP後,點選左下方第1

win11新增硬碟教學 win11新增硬碟教學 Jan 05, 2024 am 09:39 AM

在購買電腦的時候,不一定會選擇很大的硬碟,這時候如果我們想在win11新增硬碟,可以先安裝購買的新硬碟,然後在電腦裡新增分割區就可以了。 win11新增硬碟教學:1、首先,我們拆開主機,找到硬碟的插槽。 2.找到後,我們先接上“數據線”,一般會有防呆設計,插不進去反個方向即可。 3.隨後將新的硬碟插入硬碟插槽。 4.插入後,將資料線的另一頭接到電腦的主機板上。 5.安裝完成後,就可以裝回主機,並開機了。 6.開機後,我們右鍵“此電腦”,開啟“電腦管理”7、開啟後,點選左下角的“磁碟管理”8、隨後在右邊可以

Win11快速建立桌面捷徑的教學課程 Win11快速建立桌面捷徑的教學課程 Dec 27, 2023 pm 04:29 PM

在win11中,我們可以透過新增桌面捷徑的方法在桌面上快速啟動軟體或文件,而且只需要右鍵需要的文件就可以操作了。 win11新增桌面捷徑:1、開啟“此電腦”,找到你想要新增桌面捷徑的檔案或軟體。 2、找到後,右鍵選取它,點選「顯示更多選項」3、再選擇「傳送到」-「桌面捷徑」4、操作完成後,就可以在桌面上找到捷徑了。

Tampermonkey怎麼加入新腳本-Tampermonkey怎麼刪除腳本 Tampermonkey怎麼加入新腳本-Tampermonkey怎麼刪除腳本 Mar 18, 2024 pm 12:10 PM

Tampermonkey油猴Chrome擴充功能是一款使用者腳本管理插件,透過腳本提高了使用者的效率和瀏覽體驗,那麼Tampermonkey要怎麼加入新腳本呢?怎麼刪除腳本呢?下面就讓小編給大家解答吧!Tampermonkey怎麼加入新腳本:1、這裡拿GreasyFork來舉例子,打開GreasyFork網頁,輸入要按照的腳本,小編這裡選擇的一鍵離線下載2、選擇一個腳本,進入腳本頁面後可以看到安裝此腳本的按鈕3、點選安裝此腳本,來到安裝介面。這裡點擊安裝就可以了4、我們可以在以安裝的腳本中看到安裝好的一鍵

在MetaMask錢包中如何連接到Polygon網路? MetaMask錢包連接到Polygon網路的教學指南 在MetaMask錢包中如何連接到Polygon網路? MetaMask錢包連接到Polygon網路的教學指南 Jan 19, 2024 pm 04:36 PM

如何新增PolygonMainnet網路要將MATIC(Polygon)與Metamask連結使用,您需要新增一個名為「PolygonMainnet」的專用網路。使用錯誤的網路位址進行轉入會導致出現問題,所以在轉出$MATIC之前,請務必使用「PolygonMainnet」網路。 Metamask錢包預設連接到以太坊主網,但我們可以很簡單地添加“PolygonMainnet”並使用$MATIC。只需簡單的複製和貼上幾個步驟,就能完成。首先,在Metamask錢包中,點擊右上角的網路選項,選擇「C

Vue中如何將浮水印到圖片中? Vue中如何將浮水印到圖片中? Aug 19, 2023 pm 12:37 PM

Vue中如何將浮水印到圖片中? Vue是一種流行的JavaScript框架,被廣泛使用於建立Web應用程式。有時我們需要在Vue應用程式中為圖片添加浮水印,以保護圖片的版權或增加圖片的可識別性。在本文中,我將向大家介紹一種在Vue中添加浮水印到圖片的方法,並提供對應的程式碼範例。第一步,我們需要在Vue中引入一個用於添加浮水印的第三方函式庫。推薦使用watermarkj

Outlook卡在新增帳戶[修復] Outlook卡在新增帳戶[修復] Mar 23, 2024 pm 12:21 PM

當您在Outlook中新增帳戶時遇到問題時,可以嘗試以下解決方案來解決。通常這可能是由網路連線故障、使用者設定檔損壞或其他暫時性問題引起的。透過本文提供的方法,您可以輕鬆解決這些問題,確保您的Outlook能夠正常運作。 Outlook卡在新增帳戶如果您的Outlook在新增帳戶時卡住,請使用下面提到的這些修復程式:中斷並重新連接網路暫時停用防毒軟體建立新的Outlook設定檔嘗試在安全模式下新增帳戶停用IPv6運行Microsoft支援和恢復助理修復辦公室應用程式Outlook新增帳戶需

MetaMask小狐狸如何在2023年增加BSC網路? (2023最新版MetaMask小狐狸新增BSC網路教學) MetaMask小狐狸如何在2023年增加BSC網路? (2023最新版MetaMask小狐狸新增BSC網路教學) Jan 19, 2024 pm 05:39 PM

BSC網路是由加密貨幣交易所幣安開發的高效能區塊鏈,英文全名為BinanceSmartChain即幣安智能鏈。 BSC區塊鏈相容於EVM網絡,因此可以使用MetaMask錢包存取和互動。那麼小狐狸錢包怎麼加BSC網路呢?下面和小編一起來看看吧。 1.MetaMask直接添加BSC網絡首先打開MetaMask錢包,依次點擊右上角頭像–設置–網絡點擊"添加網絡"按鈕進入小狐狸錢包的網絡設置頁面,最新版的Metamask已內置熱門區塊鍊網絡,包括幣安智能鏈。我們只需要點BNBSmartCha

See all articles