zTree的某些特殊功能(拖拽和多選)

1. zTree拖拽功能存儲到數據庫

callback : {
  beforeDrag : beforeDrag,
  beforeDrop : beforeDrop,
 }
//拖拽前,檢查是否允許拖拽,是否爲根節點
function beforeDrag(treeId,treeNode){
 for(var i=0;i<treeNode.length;i++){
  if(treeNode[i].drag == false || !treeNode[i].getParentNode())
   return false;   
 }
 return true;
}

function beforeDrop(treeId, treeNode, targetNode) {
 //處理拖拽事件
 for(var i = 0;i<treeNode.length;i++){
  var curNode = treeNode[i];
  var pNode = curNode.getParentNode();
  //只允許同級拖拽
  if(pNode && pNode !== targetNode.getParentNode()){
   return false;
  } 
 }
 handleDrag(treeNode,targetNode);
}
 List<***> dataList = ...;//獲取ztree節點list
  String firstCurNode = *** ; //第一個節點
 String lastCurNode = ***; //最後一個節點(支持多個節點同時拖拽)
 Integer firstCurNodeIndex = null;
 Integer lastCurNodeIndex = null;
 Integer tarIndex = null;
 for(int i = 0;i<dataList.size();i++){
  if(DataList.get(i).getNodeName().equals(firstCurNode))
   firstCurNodeIndex = i;
  if(DataList.get(i).getNodeName().equals(lastCurNode))
   lastCurNodeIndex = i;
  if(DataList.get(i).getNodeName().equals(targetNode))
   tarIndex = i;
 }
 //向下移動
 if(lastCurNodeIndex<tarIndex){
  Integer offset = tarIndex-lastCurNodeIndex;//移動距離  
  for(int i=lastCurNodeIndex+1;i<=tarIndex;i++){
   Integer nodeOrder = dataList.get(i).getNodeOrder();
   dataList.get(i).setNodeOrder(nodeOrder-currentNodes.length);
  }
   
  for(int j = firstCurNodeIndex;j<=lastCurNodeIndex;j++){
      Integer curNodeOrder = dataList.get(j).getNodeOrder();
      dataList.get(j).setNodeOrder(curNodeOrder+offset); 
  }
 //向上移動
 }else{
  Integer offset = firstCurNodeIndex - tarIndex;//移動距離
  for(int i=firstCurNodeIndex-1;i>=tarIndex;i--){
    Integer nodeOrder = dataList.get(i).getNodeOrder();
    dataList.get(i).setNodeOrder(nodeOrder+currentNodes.length);
  }
   
  for(int j = firstCurNodeIndex;j<=lastCurNodeIndex;j++){
      Integer curNodeOrder = dataList.get(j).getNodeOrder();
      dataList.get(j).setNodeOrder(curNodeOrder-offset);
  }
 }

 //保存到數據庫
 saveToDb();
2. zTree shift鍵區域多選/勾選

callback : {
     onCheck : onCheck, //回調
  }
   //處理shift鍵多節點勾選
function onCheck(event, treeId, treeNode) {
     var preClickedNode = window.preClickedNode;  
     window.preClickedNode=treeNode;  
    event = window.event||event;//兼容IE  
     if((!event.shiftKey && !event.srcEvent.shiftKey)||!preClickedNode){//event.srcEvent.shiftKey解決firefox兼容性問題
    	 console.log("event shiftKey error");
    	 return;// shift鍵  
     }
     if(preClickedNode.getParentNode()!=treeNode.getParentNode()){  //是否同級
         preClickedNode=null;  
         return;  
     }  
     var obj = jQuery.fn.zTree.getZTreeObj(treeId);  
//     obj.selectNode(preClickedNode,true);   //選擇
     var firstNode =obj.getNodeIndex(preClickedNode);  
     var lastNode =obj.getNodeIndex(treeNode);  
     var count = lastNode - firstNode;  
     var nodeNew = preClickedNode;  
     if (count > 0) {  
         for (var i = 1; i < count; i++){  
             nodeNew = nodeNew.getNextNode();  
             if(!nodeNew)break;//用於排除隱患  
//             obj.selectNode(nodeNew, true); //選擇
             obj.checkNode(nodeNew, true, true);//勾選
         }  
     }else {  
         for (var j = 1; j < (-count); j++) {  
             nodeNew = nodeNew.getPreNode();  
             if(!nodeNew)break;//用於排除隱患  
//             obj.selectNode(nodeNew, true); //選擇
             obj.checkNode(nodeNew, true, true);//勾選
         }  
     }  
//     window.preClickedNode=null;  
 }

}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章