bootstrap插件treeview实现全选父节点下所有子节点和反选功能

发布时间 - 2026-01-11 02:27:17    点击率:

项目需要实现权限管理,使用前端框架bootstrap,所以就直接选用了bootstrap的treeview扩展插件。先上图:

选中父节点时,父节点下所有子节点也都全部选中,看代码

1、HTML代码

<h2>TreeView Checkable</h2>
<div id="treeview-checkable"></div>

2、Json数据

function getTvStateData() {
   var defaultData = [
    {
     text: 'Parent 1',
     href: '#parent1',
     tags: ['4'],
     state: {
      checked: true
     },
     nodes: [
      {
       text: 'Child 1',
       href: '#child1',
       tags: ['2'],
       nodes: [
        {
         text: 'Grandchild 1',
         href: '#grandchild1',
         tags: ['0']
        },
        {
         text: 'Grandchild 2',
         href: '#grandchild2',
         tags: ['0']
        }
       ]
      },
      {
       text: 'Child 2',
       href: '#child2',
       tags: ['0']
      }
     ]
    },
    {
     text: 'Parent 2',
     href: '#parent2',
     tags: ['0'],
     nodes: [
      {
       text: 'Child 1',
       href: '#child1',
       tags: ['2'],
       nodes: [
        {
         text: 'Grandchild 1',
         href: '#grandchild1',
         tags: ['0']
        },
        {
         text: 'Grandchild 2',
         href: '#grandchild2',
         tags: ['0']
        }
       ]
      },
      {
       text: 'Child 2',
       href: '#child2',
       tags: ['0']
      }
     ]
    },
    {
     text: 'Parent 3',
     href: '#parent3'
    },
    {
     text: 'Parent 4',
     href: '#parent4',
     tags: ['0']
    },
    {
     text: 'Parent 5',
     href: '#parent5',
     tags: ['0']
    }
   ];

   return defaultData;
  }

3、JS数据绑定,加载TreeView

$(function() {
 var $checkableTree = $('#treeview-checkable')
    .treeview({
     data: getTvStateData(), //数据
     showIcon: false,
     showCheckbox: true,
     levels: 1,
     onNodeChecked: function(event, node) { //选中节点
      var selectNodes = getChildNodeIdArr(node); //获取所有子节点
      if (selectNodes) { //子节点不为空,则选中所有子节点
       $('#treeview-checkable').treeview('checkNode', [selectNodes, { silent: true }]);
      }
      var parentNode = $("#treeview-checkable").treeview("getNode", node.parentId);
      setParentNodeCheck(node);
     },
     onNodeUnchecked: function(event, node) { //取消选中节点
      var selectNodes = getChildNodeIdArr(node); //获取所有子节点
      if (selectNodes) { //子节点不为空,则取消选中所有子节点
       $('#treeview-checkable').treeview('uncheckNode', [selectNodes, { silent: true }]);
      }
     },
     onNodeExpanded:
      function(event, data) {
       if (data.nodes === undefined || data.nodes === null) {
        
       } else if (data.tags[0] === "2") {
        alert("Tags 2");
       } else {
        alert("1111");
       }
      }
    });
 });

4、选中/取消选中父节点时,选中/取消选中所有子节点,以及选中所有子节点时,选中父节点

function getChildNodeIdArr(node) {
   var ts = [];
   if (node.nodes) {
    for (x in node.nodes) {
     ts.push(node.nodes[x].nodeId);
     if (node.nodes[x].nodes) {
      var getNodeDieDai = getChildNodeIdArr(node.nodes[x]);
      for (j in getNodeDieDai) {
       ts.push(getNodeDieDai[j]);
      }
     }
    }
   } else {
    ts.push(node.nodeId);
   }
   return ts;
  }

  function setParentNodeCheck(node) {
   var parentNode = $("#treeview-checkable").treeview("getNode", node.parentId);
   if (parentNode.nodes) {
    var checkedCount = 0;
    for (x in parentNode.nodes) {
     if (parentNode.nodes[x].state.checked) {
      checkedCount ++;
     } else {
      break;
     }
    }
    if (checkedCount === parentNode.nodes.length) {
     $("#treeview-checkable").treeview("checkNode", parentNode.nodeId);
     setParentNodeCheck(parentNode);
    }
   }
  }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# bootstrap  # treeview  # 全选  # 反选  # bootstrap treeview 扩展addNode方法动态添加子节点的方法  # BootStrap TreeView使用实例详解  # JS树形菜单组件Bootstrap TreeView使用方法详解  # 浅析使用BootStrap TreeView插件实现灵活配置快递模板  # Bootstrap树形菜单插件TreeView.js使用方法详解  # 浅析BootStrap Treeview的简单使用  # 基于MVC5和Bootstrap的jQuery TreeView树形控件(二)之数据支持json字符  # 基于MVC5和Bootstrap的jQuery TreeView树形控件(一)之数据支持json字符  # bootstrap-treeview自定义双击事件实现方法  # bootstrap-Treeview实现级联勾选  # 为空  # 也都  # 绑定  # 大家多多  # 上图  # 加载  # href  # Parent  # text  # getTvStateData  # true  # defaultData  # var  # tags  # Child  # nodes  # Grandchild  # checked  # state  # brush 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 成都网站制作公司哪家好,四川省职工服务网是做什么用?  Laravel如何实现API版本控制_Laravel API版本化路由设计策略  如何彻底删除建站之星生成的Banner?  购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?  Laravel如何与Inertia.js和Vue/React构建现代单页应用  HTML 中动态设置元素 name 属性的正确语法详解  如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?  如何快速搭建自助建站会员专属系统?  佐糖AI抠图怎样调整抠图精度_佐糖AI精度调整与放大细化操作【攻略】  今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】  html5如何实现懒加载图片_ intersectionobserver api用法【教程】  PythonWeb开发入门教程_Flask快速构建Web应用  如何在 Telegram Web View(iOS)中防止键盘遮挡底部输入框  laravel怎么配置和使用PHP-FPM来优化性能_laravel PHP-FPM配置与性能优化方法  宙斯浏览器文件分类查看教程 快速筛选视频文档与图片方法  Laravel队列由Redis驱动怎么配置_Laravel Redis队列使用教程  怎么用AI帮你设计一套个性化的手机App图标?  如何自定义safari浏览器工具栏?个性化设置safari浏览器界面教程【技巧】  Laravel如何配置中间件Middleware_Laravel自定义中间件拦截请求与权限校验【步骤】  Laravel数据库迁移怎么用_Laravel Migration管理数据库结构的正确姿势  Laravel如何实现用户角色和权限系统_Laravel角色权限管理机制  长沙做网站要多少钱,长沙国安网络怎么样?  油猴 教程,油猴搜脚本为什么会网页无法显示?  长沙企业网站制作哪家好,长沙水业集团官方网站?  Laravel怎么判断请求类型_Laravel Request isMethod用法  微信小程序 scroll-view组件实现列表页实例代码  Javascript中的事件循环是如何工作的_如何利用Javascript事件循环优化异步代码?  Win11怎么设置默认图片查看器_Windows11照片应用关联设置  制作旅游网站html,怎样注册旅游网站?  胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?  详解Nginx + Tomcat 反向代理 如何在高效的在一台服务器部署多个站点  Windows家庭版如何开启组策略(gpedit.msc)?(安装方法)  详解Nginx + Tomcat 反向代理 负载均衡 集群 部署指南  Laravel怎么实现观察者模式Observer_Laravel模型事件监听与解耦开发【指南】  如何正确下载安装西数主机建站助手?  浅谈javascript alert和confirm的美化  今日头条微视频如何找选题 今日头条微视频找选题技巧【指南】  网站制作免费,什么网站能看正片电影?  Laravel Livewire是什么_使用Laravel Livewire构建动态前端界面  如何快速搭建高效简练网站?  如何在Tomcat中配置并部署网站项目?  简单实现jsp分页  Laravel怎么使用Markdown渲染文档_Laravel将Markdown内容转HTML页面展示【实战】  C++时间戳转换成日期时间的步骤和示例代码  Android GridView 滑动条设置一直显示状态(推荐)  Laravel如何配置和使用缓存?(Redis代码示例)  制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?  Laravel如何实现文件上传和存储?(本地与S3配置)  Laravel如何生成和使用数据填充?(Seeder和Factory示例)  微信公众帐号开发教程之图文消息全攻略