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 相关文章推荐
js 图片缩放(按比例)控制代码
May 27 Javascript
javascript 隔行换色函数代码
Oct 24 Javascript
Jquery EasyUI的添加,修改,删除,查询等基本操作介绍
Oct 11 Javascript
jQuery 设置 CSS 属性示例介绍
Jan 16 Javascript
javascript数组详解
Oct 22 Javascript
有关jQuery中parent()和siblings()的小问题
Jun 01 Javascript
原生js仿浏览器滚动条效果
Mar 02 Javascript
Express + Node.js实现登录拦截器的实例代码
Jul 01 Javascript
jQuery实现下拉菜单动态添加数据点击滑出收起其他功能
Jun 14 jQuery
jquery实现搜索框功能实例详解
Jul 23 jQuery
jQuery实现的点击图片居中放大缩小功能示例
Jan 16 jQuery
js中int和string数据类型互相转化实例
Jan 16 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
thinkPHP自动验证、自动添加及表单错误问题分析
2016/10/17 PHP
php多进程应用场景实例详解
2019/07/22 PHP
javascript 全角转换实现代码
2009/07/17 Javascript
Jquery Ajax 学习实例2 向页面发出请求 返回JSon格式数据
2010/03/15 Javascript
详谈 Jquery Ajax异步处理Json数据.
2011/09/09 Javascript
jquery 操作两个select实现值之间的互相传递
2014/03/07 Javascript
JS使用getComputedStyle()方法获取CSS属性值
2014/04/23 Javascript
jQuery实现tag便签去重效果的方法
2015/01/20 Javascript
jQuery实现平滑滚动页面到指定锚点链接的方法
2015/07/15 Javascript
JavaScript学习笔记之DOM基础 2.4
2015/08/14 Javascript
JavaScript利用HTML DOM进行文档操作的方法
2016/03/28 Javascript
避免jQuery名字冲突 noConflict()方法
2016/07/30 Javascript
Cpage.js给组件绑定事件的实现代码
2017/08/31 Javascript
JavaScript解决浮点数计算不准确问题的方法分析
2018/07/09 Javascript
vue webpack打包后图片路径错误的完美解决方法
2018/12/07 Javascript
Javascript 关于基本类型和引用类型的个人理解
2019/11/01 Javascript
react实现复选框全选和反选组件效果
2020/08/25 Javascript
js 图片懒加载的实现
2020/10/21 Javascript
Python数组遍历的简单实现方法小结
2016/04/27 Python
Django框架模板注入操作示例【变量传递到模板】
2018/12/19 Python
Python2和Python3之间的str处理方式导致乱码的讲解
2019/01/03 Python
Python多线程同步---文件读写控制方法
2019/02/12 Python
详解Python self 参数
2019/08/30 Python
python+opencv3生成一个自定义纯色图教程
2020/02/19 Python
Python logging模块handlers用法详解
2020/08/14 Python
如何用 Python 制作一个迷宫游戏
2021/02/25 Python
大学生毕业的自我鉴定
2013/11/13 职场文书
大学生咖啡店创业计划书
2014/01/21 职场文书
中专生自荐信
2014/06/25 职场文书
简易离婚协议书范本2014
2014/10/15 职场文书
2014年最新版离婚协议书范本
2014/11/25 职场文书
求职信范文怎么写
2015/03/19 职场文书
公司趣味运动会开幕词
2016/03/04 职场文书
vue实现无缝轮播效果(跑马灯)
2021/05/14 Vue.js
python代码实现扫码关注公众号登录的实战
2021/11/01 Python
俄罗斯十大城市人口排名,第三首都仅排第六,第二是北方首都
2022/03/20 杂记