ZTree自定义不可展开节点的折叠图标

news2025/8/15 0:40:49

目录

  • 1. 场景
  • 2. 实现过程
  • 3. ZTree 关键配置代码
  • 4. 小结 💬

1. 场景

需求是自定义去控制某个节点,让它不可以展开,但因为它底下有子节点,所以默认的折叠图标还是+号。
也就是要实现让不可展开的节点前的折叠图标显示-号,这样就不会误导用户再去展开该节点。(勾选节点后,底下的子节点是在右边显示的,需求就是这样哒)
在这里插入图片描述

2. 实现过程

让节点不可以展开,这个比较好实现,使用beforeExpand回调函数就可以阻止节点展开了。返回一个布尔值,返回false就无法展开该节点了。
在这里插入图片描述
✨查询ZTree所有api 网址:ZTree官方文档

比较棘手的是,让无法展开的节点的折叠图标显示为-号。这个问题卡了有好几天,在网上搜了很多方法试过都不管用。隔了几天后,终于弄成了~

先在浏览器中打开开发者工具,选中节点前的折叠/ 展开元素,查看使用的背景图,发现它们父元素使用的是一张大的背景图片,不同的按钮通过background-position 去获取不同的图标。
在这里插入图片描述
折叠和展开节点时,会发现它们的类名在切换,不同类名下设置的background-position不同。所以,就可以获取到该折叠按钮,给它添加自定义类名,设置background-position去覆盖之前的图标。

怎么去获取到该折叠按钮呢?setting.view.addDiyDom去获取到该元素,再添加自定义类名。
在这里插入图片描述

const setting = {
	view: {
		...
      addDiyDom: function (treeId, treeNode) {
        console.log(`output->`,treeNode)// 得到的是每层展开节点下的子节点
        if (treeNode.code === 'demo') {
          var beforeBtn = $(`#${treeNode.tId}_switch`); // 获取节点前的折叠展开按钮
          if (beforeBtn) {
            beforeBtn.addClass('my-icon'); // 添加自定义 CSS 类名
          }
        }
      },
    },
    	...
}

在这里插入图片描述

3. ZTree 关键配置代码

const onBeforeExpand = (treeId, treeNode) => {
  if (treeNode.code !== 'demo') {// 节点不可展开的判断条件
    return true;
  }
  return false;
};
  const setting = {
    view: {
      selectedMulti: true,
      showIcon: true,
      showTitle: true,
      addDiyDom: function (treeId, treeNode) {
        if (treeNode.code === 'demo') {
          var beforeBtn = $(`#${treeNode.tId}_switch`); // 获取节点前的折叠展开按钮
          if (beforeBtn) {
            beforeBtn.addClass('my-icon'); // 添加自定义 CSS 类名
          }
        }
      },
    },
    check: {
      enable: true,
      chkStyle: 'checkbox',
    },
    data: {
      key: {
        name: 'name',
        children: 'children',
        title: '',
      },
      simpleData: {
        enable: true,
        idKey: 'id',
        pIdKey: 'pid',
        rootPId: '-1',
        nocheck: true,
      },
    },
    callback: {
      onCheck: onNodeCheck,
      beforeExpand: onBeforeExpand,
    },
  };
.ztree li span.button.bottom_open {
  background-position: -105px -42px;
}
.ztree li span.button.bottom_close {
  background-position: -126px -42px;
}
//上面两个时默认的图标,这个是添加的自定义类名
.ztree li span.button.bottom_close.my-icon{
  background-position: -105px -42px;
}

4. 小结 💬

  • 遇到比较棘手/ 没有解决思路的问题,在试了许多方法后。仍不能解决,可以先缓一缓,说不定过几天就灵光一现了!!✨(在不紧急的情况)
  • 被问题卡壳时,要知道卡壳点是什么?将问题具体化,精准定位问题。(不知道自己的目标,也会不清楚网上搜索出的答案是否会对你有用)
  • 希望自己可以及时记录,坚持更新🕓

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1085494.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

浅谈IT运维-服务请求管理与变更管理的关系与区别

服务请求 用户或用户授权代表发起的服务动作的请求,该服务动作已约定为服务交付的正常部分。服务请求是用户问询的重要类型,也是用户体验的重要组成部分。通常,服务请求包括以下内容: 发起服务动作请求(由服务提供者或与用户一起执行)信息请求资源或服务访问请求反…

Python还有什么赋值?Python赋值语句的多种形式

Python是一种强大且灵活的编程语言,其赋值语句的多样性是其特色之一。除了常见的变量赋值,Python还支持许多其他赋值方式,包括多重赋值、增量赋值以及解包赋值等。在本文中,我们将深入探讨Python中赋值语句的多种形式,…

日志管理工具Zap笔记

文章目录 Uber-go Zap日志库为什么选择 Zap配置 Zap Logger1. Logger2. SugaredLogger 定制logger1. 将日志写入文件而不是终端2. 将JSON Encoder更改为普通的Log Encoder3. 更改时间编码并添加调用者详细信息4. AddCallerSkip5. 将err日志单独输出到文件 使用Lumberjack进行日…

ARM按键中断实验

设置按键中断,按键1按下,LED亮,再按一次,灭 按键2按下,蜂鸣器响。再按一次,不响 按键3按下,风扇转,再按一次,风扇停 src/do_irq.c #include "key_it.h" ex…

基于Java+SpringBoot+Vue精品水果线上销售网站的设计与实现 前后端分离【Java毕业设计·文档报告·代码讲解·安装调试】

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点…

对验证码的识别爆破

声明:该系列文章首发于公众号:Y1X1n安全,转载请注明出处!本公众号所分享内容仅用于每一个爱好者之间的技术讨论及教育目的,所有渗透及工具的使用都需获取授权,禁止用于违法途径,否则需自行承担&…

【Python爬虫原理与基本请求库urllib详解】

Python爬虫原理与基本请求库urllib详解 这篇文章主要介绍了Python爬虫原理与基本请求库urllib详解,爬虫就是通过模拟浏览器,按照一定的规则,自动、大批量的获取网络资源,包括文本、图片、链接、音频、视频等等,需要的朋友可以参考下 文章目录…

java并发之AQS详解(待更)

一、为什么要用AQS同步框架? 开发者如果不了解JMM和多线程编程,就会写出很多线程不安全的程序,即使是经验丰富的程序员,并发编程也难免会出错。 而对于java程序员来说,并发编程就变得容易得多了,因为并发编…

《YOLOv7高阶自研》专栏介绍 CSDN独家改进创新实战 专栏目录

YOLOv7高阶自研专栏介绍: http://t.csdnimg.cn/tYI0c ✨✨✨前沿最新计算机顶会复现 🚀🚀🚀YOLOv7自研创新结合,轻松搞定科研 🍉🍉🍉持续更新中,定期更新不同数据集涨点情况 目录 全网首发&独家改进

C++DAY44

#include <iostream>using namespace std;class Animal//封装 动物 基类 { private:string name; public:Animal() {}Animal(string n):name(n){}virtual void perform() //虚函数{cout << "欢迎来到动物园" << endl;} };class Lion:public Animal…

LeetCode 1517. 查找拥有有效邮箱的用户

题目链接&#xff1a;1517. 查找拥有有效邮箱的用户 题目描述 表: Users Column NameTypeuser_idintnamevarcharmailvarchar user_id 是该表的主键&#xff08;具有唯一值的列&#xff09;。 该表包含了网站已注册用户的信息。有一些电子邮件是无效的。 编写一个解决方案&am…

LabVIEW将视觉生成器AI用作OPC服务器

LabVIEW将视觉生成器AI用作OPC服务器 介绍如何将视觉生成器AI配置为OPC服务器&#xff0c;并使用共享变量共享视觉生成器AI生成的结果。OPC是一系列标准规范&#xff0c;定义了来自不同制造商的控制设备之间的实时数据通信。OPC数据访问通信是基于客户端服务器的通信。 共享系…

适合自学的网络安全基础技能“蓝宝书”:《CTF那些事儿》

CTF比赛是快速提升网络安全实战技能的重要途径&#xff0c;已成为各个行业选拔网络安全人才的通用方法。但是&#xff0c;本书作者在从事CTF培训的过程中&#xff0c;发现存在几个突出的问题&#xff1a; 1&#xff09;线下CTF比赛培训中存在严重的 “最后一公里”问题 &#…

nodejs+vue+elementui养老院老年人服务系统er809

“养老智慧服务平台”是运用nodejs语言和vue框架&#xff0c;以MySQL数据库为基础而发出来的。为保证我国经济的持续性发展&#xff0c;必须要让互联网信息时代在我国日益壮大&#xff0c;蓬勃发展。伴随着信息社会的飞速发展&#xff0c;养老智慧服务平台所面临的问题也一个接…

Text-to-SQL小白入门(八)RLAIF论文:AI代替人类反馈的强化学习

学习RLAIF论文前&#xff0c;可以先学习一下基于人类反馈的强化学习RLHF&#xff0c;相关的微调方法&#xff08;比如强化学习系列RLHF、RRHF、RLTF、RRTF&#xff09;的论文、数据集、代码等汇总都可以参考GitHub项目&#xff1a;GitHub - eosphoros-ai/Awesome-Text2SQL: Cur…

【PX4】解决Resource not found: px4问题【踩坑实录】

【PX4】解决Resource not found: px4问题【踩坑实录】 文章目录 【PX4】解决Resource not found: px4问题【踩坑实录】1. 问题描述2. 错误排查 1. 问题描述 笔者在配置好px4的所有环境后&#xff0c;使用自己写的launch文件时&#xff0c;出现了报错 sjhsjhR9000X:~$ roslaunc…

【面试算法——动态规划 21】正则表达式匹配(hard) 交错字符串

10. 正则表达式匹配 链接: 10. 正则表达式匹配 给你一个字符串 s 和一个字符规律 p&#xff0c;请你来实现一个支持 ‘.’ 和 ‘*’ 的正则表达式匹配。 ‘.’ 匹配任意单个字符 ‘*’ 匹配零个或多个前面的那一个元素 所谓匹配&#xff0c;是要涵盖 整个 字符串 s的&#xf…

2023.10.10 关于 线程安全 问题

目录 线程安全问题实例一 引发线程安全的原因 抢占式执行 多线程修改同一变量 操作的原子性 指令重排序 内存可见性问题 线程安全问题实例二 如何解决上述线程安全问题 volatile 关键字 Java 内存模型 JMM&#xff08;Java Memory Model&#xff09; 线程安全问题实…

解决echarts配置滚动(dataZoom)后导出图片数据不全问题

先展现一个echarts&#xff0c;并配置dataZoom&#xff0c;每页最多10条数据&#xff0c;超出滚动 <div class"echartsBox" id"echartsBox"></div>onMounted(() > {nextTick(() > {var chartDom document.getElementById(echartsBox);…

前端URL拼接路径参数

前端URL拼接路径参数 一、应用场景二、具体实现1.字符串拼接2.URL对象实现 四、完整代码 一、应用场景 我们有时候会遇到浏览器URL拼接参数的场景&#xff0c;例如页面跳转时&#xff0c;带上一个特定的标识&#xff1a;https://www.baidu.com?fromcsdn 二、具体实现 1.字符…