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


Posted in Javascript onJuly 21, 2017

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

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

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

Javascript 相关文章推荐
强悍无比的WEB开发好助手FireBug(Firefox Plugin)
Jan 16 Javascript
实现网页页面跳转的几种方法(meta标签、js实现、php实现)
May 20 Javascript
java和javascript获取word文档的书签位置对比
Jun 19 Javascript
基于jquery实现的银行卡号每隔4位自动插入空格的实现代码
Nov 22 Javascript
微信小程序商城项目之商品属性分类(4)
Apr 17 Javascript
深入理解angular2启动项目步骤
Jul 15 Javascript
JS实现table表格固定表头且表头随横向滚动而滚动
Oct 26 Javascript
jQuery滑动效果实现方法分析
Sep 05 jQuery
基于vue-cli npm run build之后vendor.js文件过大的解决方法
Sep 27 Javascript
jQuery实现表格的增、删、改操作示例
Jan 27 jQuery
JS中this的4种绑定规则详解
Feb 04 Javascript
JavaScript ES6的函数拓展
Jan 18 Javascript
Node接收电子邮件的实例代码
Jul 21 #Javascript
基于JavaScript实现无限加载瀑布流
Jul 21 #Javascript
原生JS实现自定义滚动条效果
Oct 27 #Javascript
JS HTML图片显示Canvas 压缩功能
Jul 21 #Javascript
JavaScript 用fetch 实现异步下载文件功能
Jul 21 #Javascript
详解vue 模版组件的三种用法
Jul 21 #Javascript
Vue单页式应用(Hash模式下)实现微信分享的实例
Jul 21 #Javascript
You might like
利用static实现表格的颜色隔行显示
2006/10/09 PHP
php面向对象全攻略 (十四) php5接口技术
2009/09/30 PHP
了解Joomla 这款来自国外的php网站管理系统
2010/03/11 PHP
7个鲜为人知却非常实用的PHP函数
2015/07/01 PHP
PHP中多线程的两个实现方法
2016/10/14 PHP
PHP使用 Pear 进行安装和卸载包的方法详解
2019/07/08 PHP
PhpStorm的使用教程(本地运行PHP+远程开发+快捷键)
2020/03/26 PHP
一些常用的Javascript函数
2006/12/22 Javascript
基于jquery的复制网页内容到WORD的实现代码
2011/02/16 Javascript
Uglifyjs(JS代码优化工具)入门 安装使用
2020/04/13 Javascript
jquery 提交值不为空的元素示例代码
2013/05/10 Javascript
jquery等宽输出文字插件使用介绍
2013/09/18 Javascript
SublimeText自带格式化代码功能之reindent
2015/12/27 Javascript
AngularJS使用angular-formly进行表单验证
2015/12/27 Javascript
AngularJS全局scope与Isolate scope通信用法示例
2016/11/22 Javascript
浅谈js中用$(#ID)来作为选择器的问题(id重复的时候)
2017/02/14 Javascript
HTML5+Canvas调用手机拍照功能实现图片上传(上)
2017/04/21 Javascript
JS实现上传图片实时预览功能
2017/05/22 Javascript
Vue手把手教你撸一个 beforeEnter 钩子函数
2018/04/24 Javascript
[11:44]Ti9 OG夺冠时刻
2019/08/25 DOTA
python 实现插入排序算法
2012/06/05 Python
python判断字符串是否纯数字的方法
2014/11/19 Python
python实现同时给多个变量赋值的方法
2015/04/30 Python
Python实现爬虫设置代理IP和伪装成浏览器的方法分享
2018/05/07 Python
深入浅析Python获取对象信息的函数type()、isinstance()、dir()
2018/09/17 Python
python常用库之NumPy和sklearn入门
2019/07/11 Python
基于SQLAlchemy实现操作MySQL并执行原生sql语句
2020/06/10 Python
python实现猜拳游戏项目
2020/11/30 Python
Clarins娇韵诗英国官网:来自法国的天然护肤品牌
2017/04/18 全球购物
毕业班联欢会主持词
2014/03/27 职场文书
论语读书笔记
2015/06/26 职场文书
2016年最美孝心少年事迹材料
2016/02/26 职场文书
《敬重卑微》读后感3篇
2019/11/26 职场文书
Redis数据结构之链表与字典的使用
2021/05/11 Redis
CSS巧用渐变实现高级感背景光动画
2021/12/06 HTML / CSS
python机器学习实现oneR算法(以鸢尾data为例)
2022/03/03 Python