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 相关文章推荐
javascript web页面刷新的方法收集
Jul 02 Javascript
jquery ajax 检测用户注册时用户名是否存在
Nov 03 Javascript
js 实现 input type=&quot;file&quot; 文件上传示例代码
Aug 07 Javascript
使用window.prompt()实现弹出用户输入的对话框
Apr 13 Javascript
jQuery实现美观的多级动画效果菜单代码
Sep 06 Javascript
JavaScript动态设置div的样式的方法
Dec 26 Javascript
jquery.flot.js简单绘制折线图用法示例
Mar 13 Javascript
jquery编写日期选择器
Mar 16 Javascript
详解Angular.js数据绑定时自动转义html标签及内容
Mar 30 Javascript
使用vue-aplayer插件时出现的问题的解决
Mar 02 Javascript
浅谈React高阶组件
Mar 28 Javascript
Vue路由之JWT身份认证的实现方法
Aug 26 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
可以在线执行PHP代码包装修正版
2008/03/15 PHP
php生成随机颜色的方法
2014/11/13 PHP
php通过排列组合实现1到9数字相加都等于20的方法
2015/08/03 PHP
thinkPHP5.0框架自动加载机制分析
2017/03/18 PHP
PHP基于SPL实现的迭代器模式示例
2018/04/22 PHP
js弹窗代码 可以指定弹出间隔
2010/07/03 Javascript
js根据日期判断星座的示例代码
2014/01/23 Javascript
用js读、写、删除Cookie代码续篇
2014/12/03 Javascript
jquery的幻灯片图片切换效果代码分享
2015/09/07 Javascript
JQuery实现级联下拉框效果实例讲解
2015/09/17 Javascript
JavaScript文档碎片操作实例分析
2015/12/12 Javascript
DIV随滚动条滚动而滚动的实现代码【推荐】
2016/04/12 Javascript
Web程序员必备的7个JavaScript函数
2016/06/14 Javascript
JS实现根据文件字节数返回文件大小的方法
2016/08/02 Javascript
Angularjs的$http异步删除数据详解及实例
2017/07/27 Javascript
javascript简单实现深浅拷贝过程详解
2019/10/08 Javascript
JS表格的动态操作完整示例
2020/01/13 Javascript
vue项目实现多语言切换的思路
2020/09/17 Javascript
[00:23]魔方之谜解锁款式
2018/12/20 DOTA
实例Python处理XML文件的方法
2015/08/31 Python
Python随机生成数据后插入到PostgreSQL
2016/07/28 Python
Python中asyncio与aiohttp入门教程
2018/10/16 Python
Python中flatten( )函数及函数用法详解
2018/11/02 Python
对Python闭包与延迟绑定的方法详解
2019/01/07 Python
对Python3使运行暂停的方法详解
2019/02/18 Python
python实现按行分割文件
2019/07/22 Python
解决Python对齐文本字符串问题
2019/08/28 Python
python安装本地whl的实例步骤
2019/10/12 Python
keras K.function获取某层的输出操作
2020/06/29 Python
Python数据可视化常用4大绘图库原理详解
2020/10/23 Python
python mongo 向数据中的数组类型新增数据操作
2020/12/05 Python
CSS3制作炫酷的下拉菜单及弹起式选单的实例分享
2016/05/17 HTML / CSS
公务员的自我鉴定
2013/10/26 职场文书
九年级数学教学反思
2014/02/02 职场文书
环保建议书200字
2014/05/14 职场文书
幼儿园保育员责任书
2014/07/22 职场文书