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文件的代码
Jul 18 Javascript
JQuery 文本框使用小结
May 22 Javascript
浅析用prototype定义自己的方法
Nov 14 Javascript
浅谈JavaScript中定义变量时有无var声明的区别
Aug 18 Javascript
浅谈node.js中async异步编程
Oct 22 Javascript
JQuery+EasyUI轻松实现步骤条效果
Feb 22 Javascript
JS Array创建及concat()split()slice()的使用方法
Jun 03 Javascript
js 轮播效果实例分享
Dec 28 Javascript
使用mint-ui实现省市区三级联动效果的示例代码
Feb 09 Javascript
微信小程序左滑删除功能开发案例详解
Nov 12 Javascript
JavaScript中MutationObServer监听DOM元素详情
Nov 27 Javascript
React自定义hook的方法
Jun 25 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中分页及SqlHelper类用法实例
2017/01/12 PHP
PHP实现的服务器一致性hash分布算法示例
2018/08/09 PHP
PHP时间戳和日期相互转换操作实例小结
2018/12/18 PHP
window.parent调用父框架时 ie跟火狐不兼容问题
2009/07/30 Javascript
在jQuery1.5中使用deferred对象 着放大镜看Promise
2011/03/12 Javascript
Javascript学习笔记之 函数篇(二) : this 的工作机制
2014/06/24 Javascript
js怎么判断flash swf文件是否加载完毕
2014/08/14 Javascript
JavaScript常用脚本汇总(三)
2015/03/04 Javascript
javascript框架设计之类工厂
2015/06/23 Javascript
jQuery实现大转盘抽奖活动仿QQ音乐代码分享
2015/08/21 Javascript
Avalon中文长字符截取、关键字符隐藏、自定义过滤器
2016/05/18 Javascript
AngularJS基础 ng-non-bindable 指令详细介绍
2016/08/02 Javascript
jQuery EasyUI Panel面板组件使用详解
2017/02/28 Javascript
Vue计算属性的学习笔记
2017/03/22 Javascript
nodejs入门教程一:概念与用法简介
2017/04/24 NodeJs
详解动画插件wow.js的使用方法
2017/09/13 Javascript
JS Object.preventExtensions(),Object.seal()与Object.freeze()用法实例分析
2018/08/25 Javascript
解决eclipse中没有js代码提示的问题
2018/10/10 Javascript
微信小程序第三方框架对比 之 wepy / mpvue / taro
2019/04/10 Javascript
简述pm2常用命令集合及配置文件说明
2019/05/30 Javascript
如何在现代JavaScript中编写异步任务
2021/01/31 Javascript
python爬虫 urllib模块url编码处理详解
2019/08/20 Python
PyTorch 普通卷积和空洞卷积实例
2020/01/07 Python
Scrapy爬虫文件批量运行的实现
2020/09/30 Python
Python如何使用vars返回对象的属性列表
2020/10/17 Python
HTML5的Geolocation地理位置定位API使用教程
2016/05/12 HTML / CSS
关于老式浏览器兼容HTML5和CSS3的问题
2016/06/01 HTML / CSS
localStorage的过期时间设置的方法详解
2018/11/26 HTML / CSS
前台接待员岗位职责
2014/01/02 职场文书
招商专员岗位职责
2014/02/08 职场文书
统计系教授推荐信
2014/02/28 职场文书
软件专业毕业生个人自我鉴定
2014/04/17 职场文书
大学生志愿者活动总结
2014/06/27 职场文书
个人自我剖析材料
2014/09/30 职场文书
CSS 制作波浪效果的思路
2021/05/18 HTML / CSS
使用vue判断当前环境是安卓还是IOS
2022/04/12 Vue.js