前端组件库 ——ZTree 知识点大全(一)

简介: 教程来源 http://oplhc.cn ZTree 是一款基于 jQuery 的高性能树形控件,支持异步加载、节点拖拽、复选/单选联动、增删改编辑、过滤搜索及多皮肤定制,广泛应用于权限管理、组织架构等企业级场景,开箱即用,稳定可靠。

在企业级前端开发中,树形结构的数据展示是一个常见且复杂的场景。从组织架构图、菜单权限树到商品分类、区域选择,树形控件几乎无处不在。实现一个功能完善的树形控件并不简单——你需要处理异步加载、节点拖拽、复选框联动、节点过滤、编辑删除等一系列交互需求。

ZTree 正是为解决这些复杂需求而生的。它是一个依靠 jQuery 实现的多功能“树插件”,以性能优异、功能丰富、配置灵活著称。尽管在前端框架日新月异的今天,jQuery 的统治地位已不如从前,但在许多传统企业级项目、老旧系统维护以及一些特定的后台管理界面中,ZTree 凭借着其稳定性和开箱即用的丰富 API,依然是开发者在需要处理复杂树结构时的首选利器。

本文将系统全面地介绍 ZTree 的核心知识点,从其设计哲学到核心配置,从节点操作到事件处理,帮助读者建立完整的知识体系,能够熟练运用 ZTree 构建专业的企业级树形组件。

一、ZTree 概述

1.1 什么是 ZTree
ZTree 是一个依靠 jQuery 实现的多功能“树插件”。它以性能优异、功能丰富、配置灵活著称。与很多需要复杂配置的UI框架相比,ZTree 的开箱即用特性显得格外珍贵。同时它自带的一致性API也降低了后期维护的难度。

ZTree 的核心理念可以概括为三个关键词:
image.png
1.2 ZTree 的核心功能
ZTree 的核心功能非常强大,可以满足企业级应用中绝大部分树形结构的展示和操作需求。

1.标准树结构展示

支持 JSON 格式数据,可轻松从后端 API 获取数据渲染

支持父子节点层级无限极

支持节点的展开/收缩动画效果

2.多选/单选/复选框

支持复选框模式(checkbox),方便进行权限分配、多选操作

支持单选按钮模式(radio),适用于只能选择一个节点的场景(如分类选择)

支持父子节点联动:勾选父节点自动勾选所有子节点;勾选所有子节点自动勾选父节点

3.节点编辑(增删改)

支持增加节点(addNodes)

支持修改节点名称(updateNode)

支持删除节点(removeNode)

支持节点拖拽排序(drag)

4.节点拖拽

支持树内拖拽排序,可控制拖拽的范围和规则,是菜单排序、分类排序的绝佳帮手

支持跨树拖拽(多棵树之间拖拽移动节点)

可自定义拖拽时的图标、提示信息

5.异步加载

支持异步加载(lazy load)子节点数据,适用于节点数量庞大的情况

支持分页加载,避免一次性加载过多节点导致页面卡顿

6.节点过滤与高亮

支持搜索功能,可根据输入的关键词实时过滤节点

支持模糊匹配,高亮显示匹配到的文字

支持自定义过滤规则

7.节点状态标记

设置节点的半选状态(chkHalf),精准表达权限继承关系

设置节点的禁用状态(chkDisabled),防止节点被操作

设置节点的隐藏状态(isHidden)

二、安装与快速入门

2.1 获取 ZTree
方式一:官方网站下载

访问 ZTree 官网(ztree.me)下载最新版本的压缩包,解压后得到以下核心文件:

jquery.ztree.core.js:核心功能库(基础功能)

jquery.ztree.excheck.js:扩展库,实现复选框/单选框功能

jquery.ztree.exedit.js:扩展库,实现编辑、拖拽功能

jquery.ztree.exhide.js:扩展库,实现节点隐藏功能

zTreeStyle.css:默认样式文件

方式二:CDN 引入

<!-- 引入 jQuery(必须在 ZTree 之前) -->
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<!-- 引入 ZTree 核心库 -->
<script src="https://cdn.jsdelivr.net/npm/zTree.v3@3.5.98/js/jquery.ztree.core.min.js"></script>
<!-- 如需复选框/单选框,需引入此扩展 -->
<script src="https://cdn.jsdelivr.net/npm/zTree.v3@3.5.98/js/jquery.ztree.excheck.min.js"></script>
<!-- 如需编辑/拖拽,需引入此扩展 -->
<script src="https://cdn.jsdelivr.net/npm/zTree.v3@3.5.98/js/jquery.ztree.exedit.min.js"></script>
<!-- 引入样式 -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/zTree.v3@3.5.98/css/zTreeStyle/zTreeStyle.css">

方式三:npm 安装(工程化项目)

npm install ztree-v3

2.2 第一个 ZTree 示例

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>ZTree 快速入门</title>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/zTree.v3@3.5.98/css/zTreeStyle/zTreeStyle.css">
    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/zTree.v3@3.5.98/js/jquery.ztree.core.min.js"></script>
</head>
<body>
    <!-- 创建一个用于存放树的 ul 容器 -->
    <ul id="treeDemo" class="ztree"></ul>

    <script>
        // 1. 配置参数
        const setting = {
            view: {
                showLine: true,      // 是否显示连接线
                selectedMulti: false // 是否允许多选
            },
            data: {
                simpleData: {
                    enable: true,    // 启用简单 JSON 数据格式
                    idKey: "id",     // 节点 id
                    pIdKey: "pId",   // 父节点 id
                    rootPId: 0       // 根节点 id
                }
            }
        };

        // 2. 准备数据(使用简单的父子关系格式)
        const zNodes = [
            { id: 1, pId: 0, name: "父节点1", open: true },
            { id: 11, pId: 1, name: "子节点1-1" },
            { id: 12, pId: 1, name: "子节点1-2" },
            { id: 2, pId: 0, name: "父节点2", open: true },
            { id: 21, pId: 2, name: "子节点2-1" }
        ];

        // 3. 初始化树
        $.fn.zTree.init($("#treeDemo"), setting, zNodes);
    </script>
</body>
</html>

2.3 在 Vue 项目中集成 ZTree
如果你的项目使用 Vue 但仍需使用 ZTree,需要进行一些封装处理。

<template>
    <div>
        <ul ref="ztree" class="ztree"></ul>
    </div>
</template>

<script>
import 'ztree-v3/css/zTreeStyle/zTreeStyle.css';
import 'ztree-v3/js/jquery.ztree.core.min.js';
import 'ztree-v3/js/jquery.ztree.excheck.min.js';
import 'ztree-v3/js/jquery.ztree.exedit.min.js';
import $ from 'jquery';

export default {
    name: 'ZTreeComponent',
    props: {
        setting: { type: Object, default: () => ({}) },
        nodes: { type: Array, default: () => [] }
    },
    mounted() {
        this.initTree();
    },
    watch: {
        nodes: {
            handler() {
                this.updateTree();
            },
            deep: true
        }
    },
    methods: {
        initTree() {
            // 合并默认配置
            const defaultSetting = {
                view: { showLine: true, selectedMulti: false },
                data: { simpleData: { enable: true } },
                callback: {
                    onClick: this.onNodeClick,
                    onCheck: this.onNodeCheck
                }
            };
            const finalSetting = { ...defaultSetting, ...this.setting };
            $.fn.zTree.init($(this.$refs.ztree), finalSetting, this.nodes);
            this.treeObj = $.fn.zTree.getZTreeObj(this.$refs.ztree);
        },
        updateTree() {
            if (this.treeObj) {
                this.treeObj.destroy();
                $.fn.zTree.init($(this.$refs.ztree), this.finalSetting, this.nodes);
                this.treeObj = $.fn.zTree.getZTreeObj(this.$refs.ztree);
            }
        },
        onNodeClick(event, treeId, treeNode) {
            this.$emit('node-click', treeNode);
        },
        onNodeCheck(event, treeId, treeNode) {
            this.$emit('node-check', treeNode);
        },
        getCheckedNodes() {
            return this.treeObj ? this.treeObj.getCheckedNodes(true) : [];
        },
        addNode(parentNode, newNode) {
            if (this.treeObj && parentNode) {
                this.treeObj.addNodes(parentNode, newNode);
            }
        }
    }
};
</script>

来源:
https://hllft.cn

相关文章
|
JavaScript Java
若依框架 - - - 自定义打印模版
若依框架 - - - 自定义打印模版
1379 0
若依框架 - - - 自定义打印模版
|
24天前
|
前端开发 JavaScript API
前端组件库Layui知识点大全(一)
教程来源 https://hllft.cn/category/artificial-intelligence.html Layui是由国内开发者“贤心”于2016年推出的开源前端UI框架,秉持“返璞归真”理念,不依赖Webpack等工程化工具,基于原生HTML/CSS/JS与轻量模块化规范,专为后端开发者、初学者及追求高效开发的群体设计,低门槛、拿来即用。
|
13天前
|
编解码 数据可视化 前端开发
前端组件库——DataV知识点大全(二)
教程来源 https://www.xbivx.cn DataV提供40+高质量组件,涵盖边框(13种SVG动画边框)、装饰、数字翻牌器、滚动表格、水位图、锥形柱图、飞线图及全屏容器等,支持高度自定义与响应式适配,助力快速构建专业数据大屏。
|
14天前
|
移动开发 JavaScript 前端开发
前端组件库——Wot Design Uni知识点大全(一)
教程来源 https://zlpow.cn Wot Design Uni 是基于 Vue3 + TypeScript 的开源 uni-app UI 组件库,提供 70+ 高质量移动端组件,支持微信/支付宝小程序、H5、App 等多端兼容,内置暗黑模式、国际化(15+语言)与 CSS 变量主题定制,大幅提升跨平台开发效率。
|
14天前
|
JSON 小程序 前端开发
前端组件库——Vant Weapp知识点大全
教程来源 http://oplhc.cn/ Vant Weapp是有赞官方打造的高星(1.1w+)微信小程序UI组件库,轻量、稳定、高性能,含50+组件与CSS变量主题系统,支持按需引入与深度定制,是小程序开发首选开源UI方案。
|
17天前
|
前端开发 JavaScript 安全
前端组件库——Radix UI知识点大全(三)
教程来源 https://rvtst.cn/ Radix UI 是面向现代前端的无样式、高可访问性UI原语库。支持Tree Shaking、轻量Portal、CSS动画优化;提供灵活主题定制(手写CSS/Tailwind/shadcn/ui);采用复合组件、`asChild`、受控/非受控模式及完整TS支持,赋能开发者自由构建高质量界面。
|
17天前
|
人工智能 前端开发 JavaScript
前端组件库——shadcn/ui知识点大全(三)
教程来源 http://lemci.cn/ shadcn/ui通过Tree Shaking、动态导入、Tailwind JIT等实现极致性能优化,Bundle仅增20–50KB;组件即代码,完全可控、可定制、易维护,契合Next.js+Tailwind现代栈与AI协作开发。
|
17天前
|
前端开发 JavaScript 数据可视化
前端组件库——Radix UI知识点大全(一)
教程来源 https://bncne.cn/ Radix UI是React生态中革命性的无样式组件原语库,专注提供高可访问性、键盘导航完备、ARIA合规的底层交互逻辑,将样式完全交由开发者掌控,完美平衡定制自由与无障碍标准,已成为shadcn/ui等主流工具的底层基石。
|
22天前
|
JavaScript 前端开发 安全
前端组件库——Naive UI知识点大全(一)
教程来源 https://hllft.cn/category/artificial-intelligence.html Naive UI是Vue 3 + TypeScript现代化UI库,由图森未来开源。主打轻量、高性能、零CSS导入、全组件Tree Shaking及类型安全主题系统,已获GitHub 1.5w+ Star,适合追求开发体验与性能的中后台项目。
|
21天前
|
移动开发 JavaScript 小程序
前端组件库——uView UI知识点大全
教程来源 http://uklgy.cn/category/strength-training.html uView UI是uni-app生态中广受欢迎的跨平台UI组件库,支持Vue2/3,覆盖小程序、H5、App等多端。组件丰富(60+)、性能优异、文档完善,兼顾开发效率与包体积优化,累计获4.5k+ Star。