찾다
웹 프론트엔드JS 튜토리얼jQuery에서 zTree 트리 플러그인 사용 공유

jQuery에서 zTree 트리 플러그인 사용 공유

Sep 25, 2017 am 09:58 AM
jquery공유하다

공유 지침:

 프로젝트는 배경에서 반환된 데이터를 트리 보기 형식으로 표시해야 하며 노드를 클릭하여 오른쪽의 ul에 노드 정보를 추가해야 합니다. 이후 제출된 노드 정보의 비동기 로딩을 실현할 수 있는 zTree 플러그인이 선택되었습니다. 또한 이 플러그인을 처음 접했을 때 거의 모든 요구 사항을 충족할 만큼 강력하다는 사실도 입증되었습니다. 많은 사람들의 공유를 통해 공식 API 문서와 결합하여 마침내 기능을 구현했습니다. 이제 제가 학습한 내용을 요약하여 공유하겠습니다.

효과 소개 zTree의 기본 효과 외에도 다음을 사용하여 몇 가지 실용적인 작업이 추가되었습니다. 아코디언 효과를 포함한 API; 효과를 확장하려면 노드 텍스트 관련 확인란을 클릭하세요. 1단계 하위 노드 번호 표시 효과

 코드의 html 부분

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>

 css code

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

 js code

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

 백엔드 PHP 코드; 저는 순전히 프런트엔드이고 백엔드 코드는 간단하게만 작성됩니다.

//递归找到所有节点(非父节点)
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);
});

대부분의 js 코드에는 주석이 있습니다. zTree 공식 웹사이트 공식 API 문서를 확인하세요. 코드는 서버 환경에서 실행되어야 합니다.

최종 밤나무 렌더링

위 내용은 jQuery에서 zTree 트리 플러그인 사용 공유의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
무대 뒤에서 : 어떤 언어의 힘이 자바 스크립트입니까?무대 뒤에서 : 어떤 언어의 힘이 자바 스크립트입니까?Apr 28, 2025 am 12:01 AM

JavaScript는 브라우저 및 Node.js 환경에서 실행되며 JavaScript 엔진을 사용하여 코드를 구문 분석하고 실행합니다. 1) 구문 분석 단계에서 초록 구문 트리 (AST)를 생성합니다. 2) 컴파일 단계에서 AST를 바이트 코드 또는 기계 코드로 변환합니다. 3) 실행 단계에서 컴파일 된 코드를 실행하십시오.

파이썬과 자바 스크립트의 미래 : 트렌드와 예측파이썬과 자바 스크립트의 미래 : 트렌드와 예측Apr 27, 2025 am 12:21 AM

Python 및 JavaScript의 미래 추세에는 다음이 포함됩니다. 1. Python은 과학 컴퓨팅 분야에서의 위치를 ​​통합하고 AI, 2. JavaScript는 웹 기술의 개발을 촉진하고, 3. 교차 플랫폼 개발이 핫한 주제가되고 4. 성능 최적화가 중점을 둘 것입니다. 둘 다 해당 분야에서 응용 프로그램 시나리오를 계속 확장하고 성능이 더 많은 혁신을 일으킬 것입니다.

Python vs. JavaScript : 개발 환경 및 도구Python vs. JavaScript : 개발 환경 및 도구Apr 26, 2025 am 12:09 AM

개발 환경에서 Python과 JavaScript의 선택이 모두 중요합니다. 1) Python의 개발 환경에는 Pycharm, Jupyternotebook 및 Anaconda가 포함되어 있으며 데이터 과학 및 빠른 프로토 타이핑에 적합합니다. 2) JavaScript의 개발 환경에는 Node.js, VScode 및 Webpack이 포함되어 있으며 프론트 엔드 및 백엔드 개발에 적합합니다. 프로젝트 요구에 따라 올바른 도구를 선택하면 개발 효율성과 프로젝트 성공률이 향상 될 수 있습니다.

JavaScript가 C로 작성 되었습니까? 증거를 검토합니다JavaScript가 C로 작성 되었습니까? 증거를 검토합니다Apr 25, 2025 am 12:15 AM

예, JavaScript의 엔진 코어는 C로 작성되었습니다. 1) C 언어는 효율적인 성능과 기본 제어를 제공하며, 이는 JavaScript 엔진 개발에 적합합니다. 2) V8 엔진을 예를 들어, 핵심은 C로 작성되며 C의 효율성 및 객체 지향적 특성을 결합하여 C로 작성됩니다.

JavaScript의 역할 : 웹 대화식 및 역동적 인 웹JavaScript의 역할 : 웹 대화식 및 역동적 인 웹Apr 24, 2025 am 12:12 AM

JavaScript는 웹 페이지의 상호 작용과 역학을 향상시키기 때문에 현대 웹 사이트의 핵심입니다. 1) 페이지를 새로 고치지 않고 콘텐츠를 변경할 수 있습니다. 2) Domapi를 통해 웹 페이지 조작, 3) 애니메이션 및 드래그 앤 드롭과 같은 복잡한 대화식 효과를 지원합니다. 4) 성능 및 모범 사례를 최적화하여 사용자 경험을 향상시킵니다.

C 및 JavaScript : 연결이 설명되었습니다C 및 JavaScript : 연결이 설명되었습니다Apr 23, 2025 am 12:07 AM

C 및 JavaScript는 WebAssembly를 통한 상호 운용성을 달성합니다. 1) C 코드는 WebAssembly 모듈로 컴파일되어 컴퓨팅 전력을 향상시키기 위해 JavaScript 환경에 도입됩니다. 2) 게임 개발에서 C는 물리 엔진 및 그래픽 렌더링을 처리하며 JavaScript는 게임 로직 및 사용자 인터페이스를 담당합니다.

웹 사이트에서 앱으로 : 다양한 JavaScript 애플리케이션웹 사이트에서 앱으로 : 다양한 JavaScript 애플리케이션Apr 22, 2025 am 12:02 AM

JavaScript는 웹 사이트, 모바일 응용 프로그램, 데스크탑 응용 프로그램 및 서버 측 프로그래밍에서 널리 사용됩니다. 1) 웹 사이트 개발에서 JavaScript는 HTML 및 CSS와 함께 DOM을 운영하여 동적 효과를 달성하고 jQuery 및 React와 같은 프레임 워크를 지원합니다. 2) 반응 및 이온 성을 통해 JavaScript는 크로스 플랫폼 모바일 애플리케이션을 개발하는 데 사용됩니다. 3) 전자 프레임 워크를 사용하면 JavaScript가 데스크탑 애플리케이션을 구축 할 수 있습니다. 4) node.js는 JavaScript가 서버 측에서 실행되도록하고 동시 요청이 높은 높은 요청을 지원합니다.

Python vs. JavaScript : 사용 사례 및 응용 프로그램 비교Python vs. JavaScript : 사용 사례 및 응용 프로그램 비교Apr 21, 2025 am 12:01 AM

Python은 데이터 과학 및 자동화에 더 적합한 반면 JavaScript는 프론트 엔드 및 풀 스택 개발에 더 적합합니다. 1. Python은 데이터 처리 및 모델링을 위해 Numpy 및 Pandas와 같은 라이브러리를 사용하여 데이터 과학 및 기계 학습에서 잘 수행됩니다. 2. 파이썬은 간결하고 자동화 및 스크립팅이 효율적입니다. 3. JavaScript는 프론트 엔드 개발에 없어서는 안될 것이며 동적 웹 페이지 및 단일 페이지 응용 프로그램을 구축하는 데 사용됩니다. 4. JavaScript는 Node.js를 통해 백엔드 개발에 역할을하며 전체 스택 개발을 지원합니다.

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

mPDF

mPDF

mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

DVWA

DVWA

DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

VSCode Windows 64비트 다운로드

VSCode Windows 64비트 다운로드

Microsoft에서 출시한 강력한 무료 IDE 편집기