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 相关文章推荐
jquery $.ajax入门应用二
Nov 19 Javascript
jquery动态添加删除div 具体实现
Jul 20 Javascript
jQuery动画效果-fadeIn fadeOut淡入浅出示例代码
Aug 28 Javascript
Javascript优化技巧之短路表达式详细介绍
Mar 27 Javascript
BootStrap自定义popover,点击区域隐藏功能的实现
Jan 23 Javascript
JS中offset和匀速动画详解
Feb 06 Javascript
一篇文章介绍redux、react-redux、redux-saga总结
May 23 Javascript
vue spa应用中的路由缓存问题与解决方案
May 31 Javascript
小程序和web画三角形实现解析
Sep 02 Javascript
jquery 键盘事件 keypress() keydown() keyup()用法总结
Oct 23 jQuery
JS实现纵向轮播图(初级版)
Jan 18 Javascript
浅谈JavaScript中等号、双等号、 三等号的区别
Aug 06 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
我的论坛源代码(十)
2006/10/09 PHP
php入门学习知识点七 PHP函数的基本应用
2011/07/14 PHP
PHP中strlen()和mb_strlen()的区别浅析
2014/06/19 PHP
laravel 获取当前url的别名方法
2019/10/11 PHP
XP折叠菜单&amp;仿QQ2006菜单
2006/12/16 Javascript
基于jquery实现的文字向上跑动类似跑马灯的效果
2014/06/17 Javascript
jquery提示效果实例分析
2014/11/25 Javascript
深入理解JavaScript内置函数
2016/06/03 Javascript
JS前端开发判断是否是手机端并跳转操作(小结)
2017/02/05 Javascript
微信小程序 聊天室简单实现
2017/04/19 Javascript
JS实现移动端判断上拉和下滑功能
2017/08/07 Javascript
简单谈谈CommonsChunkPlugin抽取公共模块
2017/12/31 Javascript
关于vue v-for循环解决img标签的src动态绑定问题
2018/09/18 Javascript
如何使用electron-builder及electron-updater给项目配置自动更新
2018/12/24 Javascript
JS实现集合的交集、补集、差集、去重运算示例【ES5与ES6写法】
2019/02/18 Javascript
前端插件之Bootstrap Dual Listbox使用教程
2019/07/23 Javascript
使用PYTHON创建XML文档
2012/03/01 Python
使用python BeautifulSoup库抓取58手机维修信息
2013/11/21 Python
python算法学习之基数排序实例
2013/12/18 Python
python提取内容关键词的方法
2015/03/16 Python
python实现定时自动备份文件到其他主机的实例代码
2018/02/23 Python
使用Python实现一个栈判断括号是否平衡
2018/08/23 Python
python3结合openpyxl库实现excel操作的实例代码
2018/09/11 Python
python 对类的成员函数开启线程的方法
2019/01/22 Python
pycharm激活码有效到2020年11月底
2020/09/18 Python
HTML5之SVG 2D入门8—文档结构及相关元素总结
2013/01/30 HTML / CSS
linux下进程间通信的方式
2013/01/23 面试题
通信专业个人自我鉴定
2013/10/21 职场文书
歌唱比赛获奖感言
2014/01/21 职场文书
三年级班级文化建设方案
2014/05/04 职场文书
小学趣味运动会加油稿
2014/09/25 职场文书
生产工厂门卫岗位职责
2014/09/26 职场文书
领导干部作风建设自查报告
2014/10/23 职场文书
员工自我评价范文
2015/03/11 职场文书
员工工作表扬信
2015/05/05 职场文书
tensorflow中的梯度求解及梯度裁剪操作
2021/05/26 Python