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 相关文章推荐
理解JSON:3分钟课程
Oct 28 Javascript
jQuery父级以及同级元素查找介绍
Sep 04 Javascript
js实现的黑背景灰色二级导航菜单效果代码
Aug 24 Javascript
JS正则截取两个字符串之间及字符串前后内容的方法
Jan 06 Javascript
令按钮悬浮在(手机)页面底部的实现方法
May 02 Javascript
vue和webpack项目构建过程常用的npm命令详解
Jun 15 Javascript
vue实现在一个方法执行完后执行另一个方法的示例
Aug 25 Javascript
node实现分片下载的示例代码
Oct 17 Javascript
axios实现简单文件上传功能
Sep 25 Javascript
jQuery实现移动端下拉展现新的内容回弹动画
Jun 24 jQuery
JavaScript实现与web通信的方法详解
Aug 07 Javascript
vue-cli3访问public文件夹静态资源报错的解决方式
Sep 02 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
声音就能俘获人心,蕾姆,是哪个漂亮小姐姐配音呢?
2020/03/03 日漫
PHP 常用时间函数资料整理
2016/10/22 PHP
Laravel框架实现model层的增删改查(CURD)操作示例
2018/05/12 PHP
js option删除代码集合
2008/11/12 Javascript
js chrome浏览器判断代码
2010/03/28 Javascript
jQuery实现瀑布流布局
2014/12/12 Javascript
javascript中scrollTop详解
2015/04/13 Javascript
微信小程序开发中的疑问解答汇总
2017/07/03 Javascript
Angularjs添加排序查询功能的实例代码
2017/10/24 Javascript
学习React中ref的两个demo示例
2018/08/14 Javascript
微信小程序iOS下拉白屏晃动问题解决方案
2019/10/12 Javascript
python分割和拼接字符串
2013/11/01 Python
Python CSV模块使用实例
2015/04/09 Python
Python and、or以及and-or语法总结
2015/04/14 Python
Python守护进程用法实例分析
2015/06/04 Python
利用Python为iOS10生成图标和截屏
2016/09/24 Python
Python存取XML的常见方法实例分析
2017/03/21 Python
python中利用Future对象异步返回结果示例代码
2017/09/07 Python
Centos7 Python3下安装scrapy的详细步骤
2018/03/15 Python
使用python接入微信聊天机器人
2020/03/31 Python
python实现ip代理池功能示例
2019/07/05 Python
Python 网络编程之UDP发送接收数据功能示例【基于socket套接字】
2019/10/11 Python
python的faker库用法
2019/11/28 Python
Django 多对多字段的更新和插入数据实例
2020/03/31 Python
OpenCV 表盘指针自动读数的示例代码
2020/04/10 Python
为奢侈时尚带来了慈善元素:Olivela
2018/09/29 全球购物
大学生新闻专业个人自我评价
2013/11/12 职场文书
大四学年自我鉴定
2013/11/13 职场文书
大学生自我鉴定
2013/12/08 职场文书
销售总监岗位职责
2014/01/04 职场文书
小学新教师培训方案
2014/02/03 职场文书
好人好事事迹材料
2014/02/12 职场文书
四下基层实施方案
2014/03/28 职场文书
捐款仪式主持词
2015/07/04 职场文书
2016新年年会主持词
2015/07/06 职场文书
在redisCluster中模糊获取key方式
2021/07/09 Redis