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入门之对象与JSON详解
Oct 21 Javascript
JS获取select的value和text值的简单实例
Feb 26 Javascript
JavaScript中指定函数名称的相关方法
Jun 04 Javascript
JavaScript生成SQL查询表单的方法
Aug 13 Javascript
jquery动感漂浮导航菜单代码分享
Apr 15 Javascript
Bootstrap Chart组件使用教程
Apr 28 Javascript
使用RequireJS库加载JavaScript模块的实例教程
Jun 06 Javascript
Bootstrap表格使用方法详解
Feb 17 Javascript
微信小程序中input标签详解及简单实例
May 18 Javascript
JavaScript栈和队列相关操作与实现方法详解
Dec 07 Javascript
javascript的this关键字详解
May 20 Javascript
微信小程序如何实现全局重新加载
Jun 05 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+DBM的同学录程序(1)
2006/10/09 PHP
php 验证码制作(网树注释思想)
2009/07/20 PHP
php上传文件问题汇总
2015/01/30 PHP
PHP实现获取客户端IP并获取IP信息
2015/03/17 PHP
深入浅析Yii admin的权限控制
2016/08/31 PHP
Thinkphp5框架简单实现钩子(Hook)行为的方法示例
2019/09/03 PHP
Yii框架视图、视图布局、视图数据块操作示例
2019/10/14 PHP
再谈Yii Framework框架中的事件event原理与应用
2020/04/07 PHP
发两个小东西,ASP/PHP 学习工具。 用JavaScript写的
2007/04/12 Javascript
JQUERY 浏览器判断实现函数
2009/08/20 Javascript
Javascript 获取滚动条位置等信息的函数
2009/09/08 Javascript
document.onreadystatechange事件的用法分析
2009/10/17 Javascript
JavaScript中“基本类型”之争小结
2013/01/03 Javascript
瀑布流布局并自动加载实现代码
2013/03/12 Javascript
javascript的创建多行字符串的7种方法
2014/04/29 Javascript
nodejs之请求路由概述
2014/07/05 NodeJs
有效提高JavaScript执行效率的几点知识
2015/01/31 Javascript
yui3的AOP(面向切面编程)和OOP(面向对象编程)
2015/05/01 Javascript
JavaScript中的子窗口与父窗口的互相调用问题
2017/02/08 Javascript
JS异步文件上传(兼容IE8+)
2017/04/02 Javascript
微信小程序日历组件calendar详解及实例
2017/06/08 Javascript
三分钟学会用ES7中的Async/Await进行异步编程
2018/06/14 Javascript
JS实现获取word文档内容并输出显示到html页面示例
2018/06/23 Javascript
微信小程序视图容器(swiper)组件创建轮播图
2020/06/19 Javascript
微信jssdk逻辑在vue中的运用详解
2018/11/14 Javascript
jQuery实现购物车的总价计算和总价传值功能
2018/11/28 jQuery
Vue.js 中的 v-model 指令及绑定表单元素的方法
2018/12/03 Javascript
js设计模式之代理模式及订阅发布模式实例详解
2019/08/15 Javascript
JavaScript相等运算符的九条规则示例详解
2019/10/20 Javascript
ES6中的Javascript解构的实现
2020/10/30 Javascript
[32:47]完美世界DOTA2联赛 GXR vs IO 第二场 11.07
2020/11/09 DOTA
解决每次打开pycharm直接进入项目的问题
2018/10/28 Python
在python中用url_for构造URL的方法
2019/07/25 Python
Python 从subprocess运行的子进程中实时获取输出的例子
2019/08/14 Python
生物制药专业自我鉴定
2014/02/19 职场文书
工程采购员岗位职责
2014/03/09 职场文书