ztreeは、ドラッグ移動やコピーを実現します

1、公式zTreeをダウンロードしてください:http://www.treejs.cn/v3/api.php

2、導入jquery.ztree.all.min.js

関連JSの導入、これはjQueryのプラグインに基づいていることに注意してください

3、設定値を設定します

VaRの設定値= { 
    データ:{ 
        simpleData:{ 
            イネーブル:
            IDKEY:" ID " 
            PIDKEY:" PARENTID " 
            rootPIdを: - 1 
        }、
        キー:{ 
            URL:" nourl " 
            名称:" フィールド名" 
        } 
    }、
    小切手:{ 
        nocheckInherit:
    }、
    コールバック:{ 
        //ツリーのクリックイベント
        のonClick:zTreeOnClick、
         //は、イベントの終了ドラッグ
        onDropを:zTreeOnDrop 
    }、
    // オープンドラッグ
    編集:{ 
        ドラッグ:{ 
            // Ctrlキー+ドラッグ左クリックした後、コピー機能を開き 
            isCopyを:trueに// オープンモバイル機能、マウスの左ボタンのドラッグクリック 
            isMove:trueにする
        }、
        // 編集を開く 
        可能:trueに// 削除閉じる 
        :showRemoveBtn // 閉じる変更名前 
        showRenameBtn:偽を
    } 
};

 

ドラッグ機能の後に4、

関数zTreeOnDrop(イベント、treeId、のTreeNodeは、targetNode、MoveType、isCopy)
treeIdは:上記のHTMLは、ID記載されている
のTreeNodeを:ノードの選択されたセットをドラッグは、複数選択することができ
targetNode:ドラッグターゲットノードがすべてのTreeNodeを設定するには、この機能を使用することができIDはtargetNodeある[「PARENTID」]、次いでzTreeリロード
MoveTypeをモバイル型、PREV移動、ダウン次、シフトインナー、あまり有用感じる
真、偽の動きをコピーし、コピーするかどうか:isCopyを

 

5.詳細なドラッグ機能

// ztreeの組格納するグローバル変数
VARのztreeListを;
 // グローバル変数、パラメータによってコピーが便利、好ましくはグローバル変数渡されたときに最大のIDを格納するために、使用される
VaRのcopyNodeMaxIndexを;
 // ドラッグ
機能zTreeOnDrop(イベント、treeId、のTreeNode、targetNode、MoveType、isCopyがある){
     // コピー
    IF (isCopyがある){
         ためVAR I = 0;私はztreeList.lengthを<; Iは++ ){
             // 反復ztreeセットのルートノードが検出された、記憶され得ます最大IDは、グローバル変数を設定します。注:この最大値Idを取ることが便利であるが、行に配置される
            IF( "0" == ztreeList [I] [ 'ID' ]){ 
                copyNodeMaxIndex = ztreeList [I] [ 'maxIndex' ];
                 VARの TEMP =ztreeList [I];
                 //はIDとPARENTID変化させながら、設定ztreeレプリケート・サイトのセットに呼び出し 
                copyNodesToArray(のTreeNode、targetNode [「ID」]、trueにする);
                 // グローバル変数バックルートノードIDの最大ストレージはデータベースに格納されます 
                TEMP [ 'maxIndex'] = copyNodeMaxIndex;
                 // ルート交換 
                ztreeList.splice(Iは1 ,. TEMP); 
            } 
        } 
    } {
         // 動きは、標的に対する[ない]親の子ノードを含むノードの選択されたセットを設定しますノードID 
        のための(I のTreeNode){
             ため(J ztreeList){
                 IF(のTreeNode [I] [ 'ID'] == ztreeList [J] [ 'ID' ]){ 
                    ztreeList [J] [ 'PARENTID'] = targetNode [ 'ID' ];
                     BREAK ; 
                } 
            } 
        } 
    } 
    // リロードzTree 
    $ .fn.zTree.init($( "#zTree" )、ztreeList、設定); 
} 

/ * * 
 * IDとPARENTID変更しながら、グローバル変数zTreeセットを設定するためのコピーノード
 * @paramノードは
 *をPARENTIDを@param 
 *フラグに@param 
 * / 
関数copyNodesToArray(ノード、フラグにPARENTID、){
     // ノードのサイクルセット
    のための(I 中のノード){
         VAR=ノードノード[I];
         VARの子供= node.children; 
        copyNodeMaxIndex ++ ; 
        ノード[ 'ID'] = copyNodeMaxIndex; 
        ノード[ 'PARENTID'] = PARENTID;
         IF (フラグに){ 
            ノード[ 'フィールド名'] =ノード[ 「フィールド名」] +「[コピー]」; 
        } 
        // ここでは子ノードの特定のセットとして定義され、またはコピーを複製 
        node.children = 不定;
         //は単にコピーし、サブノードを除く、グローバルztreeセットにノードを追加しますノード自体
        ztreeList.push(ノード);
         IF(2 == isOnlyChildren(子供)){
             //図2は、それが収集グローバルztreeに再帰的であれば、同様にノード子供に加えて、外部返されるノードのセットを表し 
            copyNodesToArray(子供、ノード[「ID」]、偽に); 
        } そう IF(1 ==。isOnlyChildren(子供)) {
             //は、その外側の子ノードに加えて表すノードのコレクションを返し、次に通過する直系子ノードのセット、及びPARENTID IDとグローバルztreeにコレクションを提供
            するため(J における{子供)
                copyNodeMaxIndex ++を
                子供[J] [ 'ID'] = copyNodeMaxIndex; 
                子供[J] [ 'PARENTID']ノード= [ 'ID' ]; 
                ztreeList.push(子供[J]); 
            } 
        } 
        //次に、利用可能な治療法は存在しない、存在しない場合0のノードセットを返す、上記ノード自体が処理されている
    } 
} 

/ * * 
 *ノードのセットがどのように多くの子レベルのノードを決定されます。これは、セットが存在しない場合0のノードは、そのノードの集合は、ノードの組に加えて、2つのリターン自体をそれらの外部に加えて子ノードを表していないだけでなく、子ノード有し返し
 * @param子供
 *数@Returns {} 
 * / 
関数isOnlyChildren(子供たち){
     IF(子供=不定&& children.length> 0!){
         ため(I における)子供{
             VAR Children1 = 子供[I] .children;
             IF!(=不定&& children1.length Children1> 0 ){
                 戻り 2 
            } 
        } 
        リターン 1
    } 
    戻り 0 
}

 

6、効果

 

 モバイル1

 

 モバイル2

 

 結果

 

 

テストのコピー

 

 1つのコピー

 

 コピー2

 

 コピー結果

 

 コピーサブノードの複数のレベルをも得ることができます

 

 

 

 



おすすめ

転載: www.cnblogs.com/xiaostudy/p/11515574.html