首頁 web前端 js教程 jQuery中zTree樹皮外掛使用分享

jQuery中zTree樹皮外掛使用分享

Sep 25, 2017 am 09:58 AM
jquery 分享

分享說明:

  專案需要樹狀視圖形式展示後台返回的資料;並實現點擊節點將節點資訊新增至右側的ul;待後續提交獲取使用;選擇了能夠實現異步載入節點資訊的zTree插件,事實也證明這個插件足夠強大,能夠滿足幾乎所有需求;剛接觸時看了很多人的分享,結合官方api文檔,終於實現了功能,現將我學習的總結也分享出去.

  效果介紹;除了zTree預設的效果;使用api增加了一些實用的操作;包括手風琴效果;點擊父節點展開效果;點擊節點文字關聯複選框效果;一級子節點數量展示效果.

  外部引入資源

1     <link rel="stylesheet" href="./zTree_v3-master/css/zTreeStyle/zTreeStyle.css">
2     <script type="text/javascript" src="./jquery-1.9.1.js"></script>
3     <script type="text/javascript" src="./zTree_v3-master/js/jquery.ztree.all.min.js"></script>
登入後複製

  html部分程式碼

<div class="box">
        <ul id="treeDemo" class="ztree"></ul>
        <ul id="ulright">
            <li style="text-align: center;background-color: #ddd;border-bottom: 1px dashed">已选择</li>
        </ul>
    </div>
登入後複製

  css程式碼

ul,li,body{
        margin: 0;
        padding: 0;
    }
    .ztree li span.node_name {
        font-size: 16px;
    }
    .box{
        width: 500px;
        margin:10px auto;
        border:3px solid #ccc;
        padding: 20px;
        border-bottom: none;
    }
    #treeDemo{
        width: 200px;
        display: inline-block;
        background-color: #f1f1f1;
        min-height: 200px;
    }
    #ulright{
        width: 200px;
        margin-left: 50px;
        min-height: 200px;
        border:1px solid #ccc;
        display: inline-block;
        vertical-align: top;
        background-color: #eeeee8;
    }
    #ulright li{
        width: 100%;
        height: 30px;
        list-style: none;
        line-height: 30px;
        margin-bottom: 3px;
        background-color: #00b6ba;
        padding-left: 10px;
        box-sizing: border-box;

    }


    /**/
    .ztree li a.curSelectedNode{
        background-color: transparent;
        border:#00b6ba;
    }
    .ztree li span.node_name{
        font-size: 18px;
        line-height: 18px;
        color: #000;
    }
    .ztree li a{
       padding: 5px;
       vertical-align: middle;
    }
    .ztree li a:hover{
        text-decoration: none;
    }
    .ztree li span.button.chk{
        margin: 9px 3px;
    }
登入後複製

  js

//递归找到所有节点(非父节点)
function getAllChildrenNodes(treeNode,result){
      if (treeNode.isParent) {
        var childrenNodes = treeNode.children;
        if (childrenNodes) {
            for (var i = 0; i < childrenNodes.length; i++) {
                if(!childrenNodes[i].children){
                    result.push(childrenNodes[i].name);
                }
                result = getAllChildrenNodes(childrenNodes[i], result);
            }
        }
    }
    return result;
}
var parames = 3;
//zTree的所有配置
var setting = {
    //zTree 的唯一标识,初始化后,等于 用户定义的 zTree 容器的 id 属性值。
    treeId:"",
    //zTree 容器的 jQuery 对象,主要功能:便于操作,内部参数,不可修改
    treeObj:null,
    //异步请求数据配置;当父节点没有子节点时;点击此父节点会触发请求
    async:{
        //打开此功能
        enable: true,
        url:"./zTreeDemoV9.0SimpleFromV10.0.php",
        type:"post",
        //发送的父级id的字段定义;如修改,遵循格式autoParam: ["id=parentId"]
        autoParam: ["id"],
        //其他需要提交的参数["name","topic","key","ss"]转换后格式为name=topic&key=ss
        otherParam:["json",parames || 1,"test","2"],
        dataType:"json",
        contentType: "application/x-www-form-urlencoded",
        //ajax请求后的数据预处理函数
        dataFilter: function(treeId,parentNode,responseData){
            for(var i=0;i<responseData.length;i++){
                responseData[i] = JSON.parse(responseData[i])
            }
            return responseData;
        }
    },
    //数据配置
    data: {
        simpleData: {
            enable: true,
            idKey: "id", //修改默认的ID为自己的id
            pIdKey: "pid", //修改默认父级ID为自己数据的父级id
            rootPId: 0 //根节点的父节点id
        }
    },
    //视图配置
    view: {
        //是否显示节点前的图标
        showIcon: false,
        //节点上a标签的样式
        fontCss: {
        }
    },
    //选框配置
    check: {
        //启用复选框
        enable: true,
        //chkStyle:"radio"
        //复选框父子级选择联动设置
        chkboxType: { "Y": "ps", "N": "ps" }
    },
    //事件配置
    callback: {
        //点击复选框之前的事件
        beforeCheck:function(treeId, treeNode){//如果节点是父节点,并且勾选时没有子节点,则不允许勾选;针对父节点没有展开,则没有异步加载子节点,此情况禁止点击父节点全选子节点的操作
            if(treeNode.isParent && !treeNode.children){
                return false;
            }
        },
        //回调错误事件
        onAsyncError: function(event, treeId, treeNode, XMLHttpRequest, textStatus, errorThrown){
            alert("初始化节点数据失败,请稍后重试");
        },
        //回调成功事件
        onAsyncSuccess: function(event, treeId, treeNode, resData){
            var zTree = $.fn.zTree.getZTreeObj("treeDemo");
            console.log("数据加载成功");
            var count = (treeNode.children.length);
            //加载成功后;在节点后面显示此父节点下有几个一级子节点
            $(".ztree").find("a[title="+treeNode.name+"]").find("span[class=&#39;node_name&#39;]").html(treeNode.name+"<span>("+count+")</span>");
        },
        //父节点展开时的事件
        onExpand: function(event, treeId, treeNode){
            //zTree对象
            var zTree = $.fn.zTree.getZTreeObj("treeDemo");
            //获取点击的id
            var nowId = treeNode.id;
            //获取所有节点
            var allNodes = zTree.getNodes();
            //获取点击节点的层级
            var level = treeNode.level;
            //定义过滤函数;获取节点层级与点击节点层级相同并且为父节点的节点
            function filter(node) {
                return (node.level == treeNode.level && node.isParent);
            }
            //获得点击节点同级的父节点的集合
            var sameLevelNodes = zTree.getNodesByFilter(filter);
            //遍历同级节点集合
            for(var i=0;i<sameLevelNodes.length;i++){
                //将非被点击父节点收起;实现手风琴效果
                if(sameLevelNodes[i].id != nowId){
                    zTree.expandNode(sameLevelNodes[i], false, true, true);
                }
            }
        },
        //点击事件
        onClick: function(e, treeId, treeNode, clickFlag) {
            //tree实例
            var zTree = $.fn.zTree.getZTreeObj("treeDemo");
            //点击文字关联复选框
            //如果不是父节点,则关联,或者是父节点,但展开状态位true是,也关联;
            if(!treeNode.isParent || (treeNode.isParent && treeNode.open)){
                zTree.checkNode(treeNode, !treeNode.checked, true);//点击文字关联复选框
            }
            //点击文字展开当前节点
            zTree.expandNode(treeNode, true, true, true);
            // zTree.reAsyncChildNodes(treeNode, "refresh");//强行异步加载(存在子节点也进行加载)
            //手风琴效果;直接调用onExpand
            zTree.setting.callback.onExpand(e, treeId, treeNode);

            //点击节点名称和勾选节点前面的复选框逻辑相同;
            //直接在onClick里面调用onCheck函数;并传入所需参数
            zTree.setting.callback.onCheck(e, treeId, treeNode);
        },
        //点击复选框事件
        onCheck: function(e, treeId, treeNode) {
            //获取右侧ul内所有li标签;用于比较当前选择复选框在右侧是否一斤存在
            var rightLi = $("#ulright").find("li");
            //选中的是底层节点;
            if(!treeNode.isParent){
                //选中状态,加入到右侧
                if(treeNode.checked){
                    //遍历右侧li,如果选中的已经存在;return
                    for(var i=0;i<rightLi.length;i++){
                        if($(rightLi[i]).attr("title") == treeNode.name){
                            return;
                        }
                    }
                    // 创建li 追加li
                    var addLi = $("<li title="+treeNode.name+"><span></span>");
                    addLi.find("span").text(treeNode.name);
                    addLi.animate({
                        width:"100%",
                        height:"30"
                    },400)
                    addLi.appendTo($("#ulright"));
                    //如果点击的节点存在connect字段;判断复选框状态加入到右侧ul或删除
                    if(treeNode.connect){
                        //遍历右侧li,如果选中的已经存在;return
                        for(var i=0;i<rightLi.length;i++){
                            if($(rightLi[i]).attr("title") == treeNode.connect){
                                return;
                            }
                        }
                         // 创建li 追加li
                        var addLi = $("<li title="+treeNode.connect+"><span></span>");
                            addLi.find("span").text(treeNode.connect);
                            addLi.animate({
                                width:"100%",
                                height:"30"
                            },400)
                        addLi.appendTo($("#ulright"));
                    }
                    //将被勾选的节点背景颜色更改
                    $("#treeDemo").find("a[title="+treeNode.name+"]").css("backgroundColor","#00b6ba");
                //非选中状态,删除
                }else{
                    //将右侧的次节点对应的li删除
                    $("#ulright").find("li[title="+treeNode.name+"]").animate({
                        width:"0%",
                        height:"0"
                    },400,function(){
                        $("#ulright").find("li[title="+treeNode.name+"]").remove();
                    })
                    //取消此节点的背景颜色
                   $("#treeDemo").find("a[title="+treeNode.name+"]").css("backgroundColor","");
                }
            //选中的是父节点;获取所有子节点(非父节点),判断复选框状态加入到右侧ul或删除
            }else{
                //调用递归函数;获取所有非父级子节点数组集合
                var addNodesArray = getAllChildrenNodes(treeNode,[]);
                //是选中状态,加入到右侧ul
                if(treeNode.checked){
                    //定义存储右侧li的数组
                    var rightLiArray = [];
                    $("#ulright li").each(function(i,v){
                        rightLiArray.push($(v).attr("title"))
                    })
                    rightLiArray = rightLiArray.slice(1);
                    //遍历勾选的数组集合
                    for(var i=0;i<addNodesArray.length;i++){
                        //判断此节点是否在右侧ul内;不存在则加入
                        if(rightLiArray.indexOf(addNodesArray[i]) == -1){
                            //创建li 追加li
                            var addLi = $("<li title="+addNodesArray[i]+"><span>"+addNodesArray[i]+"</span>");
                            addLi.animate({
                                width:"100%",
                                height:30
                            },400)
                            addLi.appendTo($("#ulright"));
                        }
                        //将节点背景颜色修改
                        $("#treeDemo").find("a[title="+addNodesArray[i]+"]").css("backgroundColor","#00b6ba");
                    }
                //是非选中状态,删除
                }else{
                    //遍历节点,执行删除操作
                    for(var i=0;i<addNodesArray.length;i++){
                        $("#ulright").find("li[title="+addNodesArray[i]+"]").animate({
                            width:"0%",
                            height:0
                        },function(){
                            $(this).css("display","none");
                            $(this).remove();
                        })
                        //还原背景颜色
                        $("#treeDemo").find("a[title="+addNodesArray[i]+"]").css("backgroundColor","");
                    }
                }
            }
        },
    }

};
//zTree的节点信息;可一次性全部加载;可试试异步请求
var zNodes = [{
            name: "数据表",//名称
            id: 4,//id,子元素的pid
            isParent:true,//是否为父节点,默认为false
            pid:0//父节点id;data中的rootPId;
        },{
            name: "测试表",
            id: 1,
            isParent:true,
            pid:0
        },{
            name: "信息表",
            id: 2,
            isParent:true,
            pid:0
        },{
            name: "作废表",
            id: 3,
            isParent:true,
            pid:0
        }];
$(document).ready(function() {
    //初始化zTree; zTree容器的jquery对象/ 配置/ 节点
    $.fn.zTree.init($("#treeDemo"), setting, zNodes);
});
登入後複製
##   後臺碼;本人純前端,後台程式碼只會簡單的寫寫;

<?php

$pId = $_POST[&#39;id&#39;];

if($pId == 4){
    $array = array(&#39;{"name":"数据表_一","id":"1_1","pid":"0"}&#39;,&#39;{"name":"数据表_二","id":"1_2","pid":"0"}&#39;,&#39;{"name":"数据表_三","id":"1_3","pid":"0"}&#39;,&#39;{"name":"数据表_四","id":"1_4","pid":"0"}&#39;,&#39;{"name":"数据表_五","id":"1_5","pid":"0"}&#39;);
}else if($pId == 1){
    $array = array(&#39;{"name":"测试表_一","id":"2_1","pid":"1"}&#39;,&#39;{"name":"测试表_二","connect":"测试表_一","id":"2_2","pid":"1"}&#39;,&#39;{"name":"测试表_三","id":"2_3","pid":"1"}&#39;,&#39;{"name":"测试表_四","id":"2_4","pid":"1"}&#39;,&#39;{"name":"测试表_五","id":"2_5","pid":"1"}&#39;);
}else if($pId == 2){
    $array = array(&#39;{"name":"信息表_一","id":"3_1","pid":"3"}&#39;,&#39;{"name":"信息表_二","id":"3_2","pid":"3"}&#39;,&#39;{"name":"信息表_三","id":"3_3","pid":"3"}&#39;,&#39;{"name":"信息表_四","id":"3_4","pid":"3"}&#39;,&#39;{"name":"信息表_五","id":"3_5","pid":"3"}&#39;,&#39;{"name":"信息表_五_一","id":"3_5_1","pid":"3_5"}&#39;,&#39;{"name":"信息表_五_二","id":"3_5_2","pid":"3_5"}&#39;,&#39;{"name":"信息表_三_一","id":"3_3_1","pid":"3_3"}&#39;,&#39;{"name":"信息表_三_二","id":"3_3_2","pid":"3_3"}&#39;,&#39;{"name":"信息表_三_三","id":"3_3_3","pid":"3_3"}&#39;);
}else if($pId == 3){
    $array = array(&#39;{"name":"作废表_一","id":"4_1","pid":"3"}&#39;,&#39;{"name":"作废表_二","id":"4_2","pid":"3"}&#39;,&#39;{"name":"作废表_三","id":"4_3","pid":"3"}&#39;);
}

echo json_encode($array);
登入後複製
js程式碼大部分都有註解;詳細api可在zTree官網查看 進入官方api文檔  程式碼運作需在伺服器環境下運作;

最終栗子效果圖

以上是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脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++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 14, 2024 pm 04:40 PM

  夸克網盤和百度網盤都是很便利的儲存工具,不少的用戶都在詢問這兩款軟體互通嗎?夸克網盤怎麼分享到百度網盤?下面就讓本站來為用戶們來仔細的介紹一下夸克網盤的文件怎麼保存到百度網盤方法吧。夸克網盤的文件怎麼保存到百度網盤方法1、想要知道怎麼把夸克網盤的文件轉到百度網盤,首先在夸克網盤上下載需要保存的文件,然後打開百度網盤客戶端後,選擇壓縮檔案要儲存的資料夾,雙擊開啟該資料夾。  2、開啟該資料夾後,點選視窗左上角區域的「上傳」。  3、在電腦中找到需要上傳的壓縮文件,點選選

網路易雲音樂怎麼分享到微信朋友圈_網易雲音樂分享到微信朋友圈教程 網路易雲音樂怎麼分享到微信朋友圈_網易雲音樂分享到微信朋友圈教程 Mar 25, 2024 am 11:41 AM

1.首先我們進入到網易雲音樂中,然後在軟體首頁介面中,點選進入到歌曲的播放介面中。 2.然後在歌曲播放介面中,找到右上方的分享功能按鈕,如下圖紅框所示位置,點擊選擇分享的管道;在分享管道中,點擊底部的「分享至」選項,然後選擇第一個“微信朋友圈”,即可將內容分享至微信朋友圈。

百度網盤怎麼分享文件給好友 百度網盤怎麼分享文件給好友 Mar 25, 2024 pm 06:52 PM

近期,百度網盤安卓客戶端迎來了全新的8.0.0版本,這個版本不僅帶來了許多變化,還增添了許多實用功能。其中,最引人注目的便是資料夾共享功能的增強。現在,使用者可以輕鬆邀請好友加入,共同分享工作與生活中的重要文件,實現更便利的協作與分享。那麼究竟該如何分享給好友自己需要分享的文件呢,下文中本站小編就會為大家帶來詳細內容介紹,希望能幫助大家! 1)開啟百度雲APP,先點選在首頁選擇相關的資料夾,再點選介面右上角的【...】圖示;(如下圖)2)接著點選「共用成員」一欄中的【+ 】,最後在勾選所

jQuery中如何使用PUT請求方式? jQuery中如何使用PUT請求方式? Feb 28, 2024 pm 03:12 PM

jQuery中如何使用PUT請求方式?在jQuery中,發送PUT請求的方法與發送其他類型的請求類似,但需要注意一些細節和參數設定。 PUT請求通常用於更新資源,例如更新資料庫中的資料或更新伺服器上的檔案。以下是在jQuery中使用PUT請求方式的具體程式碼範例。首先,確保引入了jQuery庫文件,然後可以透過以下方式發送PUT請求:$.ajax({u

jQuery小技巧:快速修改頁面所有a標籤的文本 jQuery小技巧:快速修改頁面所有a標籤的文本 Feb 28, 2024 pm 09:06 PM

標題:jQuery小技巧:快速修改頁面所有a標籤的文字在網頁開發中,我們經常需要對頁面中的元素進行修改和操作。使用jQuery時,有時候需要一次修改頁面中所有a標籤的文字內容,這樣可以節省時間和精力。以下將介紹如何使用jQuery快速修改頁面所有a標籤的文本,同時給出具體的程式碼範例。首先,我們需要引入jQuery庫文件,確保在頁面中引入了以下程式碼:&lt

解決Discuz微信分享無法顯示的問題 解決Discuz微信分享無法顯示的問題 Mar 09, 2024 pm 03:39 PM

標題:解決Discuz微信分享無法顯示的問題,需要具體程式碼範例隨著行動網路的發展,微信成為了人們日常生活中不可或缺的一部分。在網站開發中,為了提升使用者體驗和擴大網站的曝光度,許多網站會整合微信分享功能,讓使用者能夠輕鬆分享網站的內容到朋友圈或微信群組。然而,有時在使用Discuz等開源論壇系統時,會遇到微信分享無法顯示的問題,這給使用者體驗帶來了一定的困

使用jQuery修改所有a標籤的文字內容 使用jQuery修改所有a標籤的文字內容 Feb 28, 2024 pm 05:42 PM

標題:使用jQuery修改所有a標籤的文字內容jQuery是一款受歡迎的JavaScript庫,被廣泛用於處理DOM操作。在網頁開發中,經常會遇到需要修改頁面上連結標籤(a標籤)的文字內容的需求。本文將介紹如何使用jQuery來實現這個目標,並提供具體的程式碼範例。首先,我們需要在頁面中引入jQuery庫。在HTML檔案中加入以下程式碼:

如何分享ppt 如何分享ppt Mar 20, 2024 pm 07:51 PM

職場人士對PPT製作不會太陌生吧,因為不管是年終總結還是述職報告很多公司都要求用PPT的形式來體現。此時就遇到一個問題,那就是如何分享PPT呢?不要急,下面小編帶大家了解分享PPT的方法。 1.先選擇編輯好的PPT,點選左上角的儲存(如果使用的是WPS,可以先點選登入)。 2.接著點擊下圖選單列的分享圖標,如下圖所示。 3、然後會彈出下圖的分享介面,可以看到會出現一個分享鏈接,點擊發送鏈接即可分享。 4.還可以點擊下圖左下角的“允許好友編輯”,這樣好友也可以點擊編輯這個PPT了。 5.如果需要給P

See all articles