Ztree勾選節點后取消勾選其父子節點


前言:

Ztree官方給的API可以設置勾選一個節點的同時勾選子節點或者父節點,也可以設置不影響父子節點,即將chkboxType設置為{"Y":"","N":""},而有時我們希望實現這樣的功能,點擊一個節點判斷他所有的父節點和子節點,如果有選中的話就取消勾選,這樣的話官方貌似沒有給出有效的解決方案,這篇文章記錄一下我是怎么解決這個問題的。

需求:

點擊一個節點,判斷他所有的父節點和子節點,如果有選中的節點,則取消選中。

實現步驟:

首先看下官方給的API

這里給個傳送門:點擊這里

可以看到其實官方給的是這樣的邏輯:
假設有這樣一組數據:

江蘇、南京、XX區域、XX街道、XX小區

那么在勾選南京的時候其實要么選中所有子節點、要么選中所有父節點。或者不影響父子節點。

而要實現上面的需求肯定是要先設置為不影響父子節點,如下所示效果:

然后循環遍歷其父節點和子節點,設置checked屬性為false即可;

幾點需要注意的:

1.這里子節點是一個遞歸操作,子節點的子節點也應該被取消選中。

2.treeNode.getPath();可以獲取當前節點的所有父節點,包括他自己,所以要把自身排除。

3.每次設置完checked屬性為false之后,應該更新一下節點,否則沒有直接效果,鼠標滑過才會有效果。

示例代碼如下:

     function customBeforeCheck(event, treeId,  treeNode,treeObj) {
           var childNodes = treeNode.children;
           for(var i=0;i<childNodes.length;i++) {
                recursion(childNodes[i],treeObj);
           }
           var parenNodes = treeNode.getPath();
           for(var i=0;i<parenNodes.length;i++) {
                if(parenNodes[i] != null && parenNodes[i].id !=  treeNode.id) {
                     parenNodes[i].checked = false;
                     treeObj.updateNode(parenNodes[i]);
                }
           }
     }
     
     function recursion(node,treeObj) {
           if(node.children && node.children.length >0) {
                node.checked = false;
                for(var i=0;i<node.children.length;i++) {
                     recursion(node.children[i],treeObj);
                }
           }else{
                node.checked = false;
           }
           treeObj.updateNode(node);
     }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM