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 相关文章推荐
对 lightbox JS 图片控件进行了一下改造, 使其他支持复杂的图片说明
Mar 20 Javascript
JavaScript模拟深蓝vs卡斯帕罗夫的国际象棋对局示例
Apr 22 Javascript
简介alert()与console.log()的不同
Aug 26 Javascript
仿百度换肤功能的简单实例代码
Jul 11 Javascript
js以分隔符分隔数组中的元素并转换为字符串的方法
Nov 16 Javascript
jQuery UI制作选项卡(tabs)
Dec 13 Javascript
详解JavaScript调用栈、尾递归和手动优化
Jun 03 Javascript
vue2.0 子组件改变props值,并向父组件传值的方法
Mar 01 Javascript
小程序清理本地缓存的方法
Aug 17 Javascript
es6数值的扩展方法
Mar 11 Javascript
原生JS实现微信通讯录
Jun 18 Javascript
vue 项目中当访问路由不存在的时候默认访问404页面操作
Aug 31 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
一拳超人中怪人协会钦定! S级别最强四人!
2020/03/02 日漫
处理php自动反斜杠的函数代码
2010/01/05 PHP
Apache2中实现多网站域名绑定的实现方法
2011/06/01 PHP
php递归法读取目录及文件的方法
2015/01/30 PHP
以文件形式缓存php变量的方法
2015/06/26 PHP
Javascript获取当前时间函数和时间操作小结
2014/10/01 Javascript
js判断浏览器版本以及浏览器内核的方法
2015/01/20 Javascript
Node.js中child_process实现多进程
2015/02/03 Javascript
JavaScript数据结构和算法之图和图算法
2015/02/11 Javascript
Javascript 6里的4个新语法
2016/08/25 Javascript
简单几步实现返回顶部效果
2016/12/05 Javascript
微信端开发--登录小程序步骤
2017/01/11 Javascript
Angular4项目中添加i18n国际化插件ngx-translate的步骤详解
2017/07/02 Javascript
angular $watch 一个变量的变化(实例讲解)
2017/08/02 Javascript
使用JS编写的随机抽取号码的小程序
2017/08/11 Javascript
nodejs实现超简单生成二维码的方法
2018/03/17 NodeJs
浅谈高大上的微信小程序中渲染html内容—技术分享
2018/10/25 Javascript
vue-cli项目使用mock数据的方法(借助express)
2019/04/15 Javascript
Vue Echarts实现可视化世界地图代码实例
2019/05/07 Javascript
微信小程序视频弹幕发送功能的实现
2020/12/28 Javascript
[45:10]NB vs Liquid Supermajor小组赛 A组胜者组决赛 BO3 第二场 6.2
2018/06/04 DOTA
Python内置函数Type()函数一个有趣的用法
2015/02/18 Python
详解Python中的正则表达式的用法
2015/04/09 Python
用python简单实现mysql数据同步到ElasticSearch的教程
2018/05/30 Python
python文件操作之批量修改文件后缀名的方法
2018/08/10 Python
python实现决策树分类(2)
2018/08/30 Python
Python二叉搜索树与双向链表转换算法示例
2019/03/02 Python
Python Tkinter 简单登录界面的实现
2019/06/14 Python
Python 实现还原已撤回的微信消息
2019/06/18 Python
实例讲解利用HTML5 Canvas API操作图形旋转的方法
2016/03/22 HTML / CSS
学子宴答谢词
2014/01/25 职场文书
艺术设计专业毕业生推荐信
2014/07/08 职场文书
文明单位申报材料
2014/12/23 职场文书
高三语文复习计划
2015/01/19 职场文书
JS中一些高效的魔法运算符总结
2021/05/06 Javascript
修改Nginx配置返回指定content-type的方法
2022/09/23 Servers