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