bootstrap插件treeview实现全选父节点下所有子节点和反选功能

 更新时间:2017年07月21日 15:39:28   作者:Rain  
这篇文章主要为大家详细介绍了bootstrap插件treeview实现全选父节点下所有子节点、反选功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

项目需要实现权限管理,使用前端框架bootstrap,所以就直接选用了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);
    }
   }
  }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • js实现点击按钮复制文本功能

    js实现点击按钮复制文本功能

    这篇文章主要为大家详细介绍了原生js实现点击按钮复制文本的相关代码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-04-04
  • javascript汉字拼音互转的简单实例

    javascript汉字拼音互转的简单实例

    下面小编就为大家带来一篇javascript汉字拼音互转的简单实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-10-10
  • js对象的复制继承实例

    js对象的复制继承实例

    这篇文章主要介绍了js对象的复制继承用法,以一个较为简单的实例分析了js对象复制继承的使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-01-01
  • js实现HashTable(哈希表)的实例分析

    js实现HashTable(哈希表)的实例分析

    本文详细介绍javascript哈希表的实例分析及用法。下面就跟小编一起来学习下吧
    2016-11-11
  • 微信小程序实现长按 识别图片二维码(两种方案)

    微信小程序实现长按 识别图片二维码(两种方案)

    这篇文章主要介绍了微信小程序实现长按 识别图片二维码(两种方案),第一种方案只需要在image里面加一个属性就可以了,本文结合实例代码介绍的非常详细,需要的朋友可以参考下
    2024-01-01
  • uni-app实现NFC读取功能

    uni-app实现NFC读取功能

    这篇文章主要为大家详细介绍了uni-app实现NFC读取功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • JavaScript中严格判断NaN的方法

    JavaScript中严格判断NaN的方法

    这篇文章主要介绍了JavaScript中严格判断NaN的方法,非常不错,具有参考借鉴价值 ,需要的朋友可以参考下
    2018-02-02
  • BootStrap的两种模态框方式

    BootStrap的两种模态框方式

    bootstrap弹出层有多种触发方式,以下是我用到的bootstrap的两种模态框方式,需要的的朋友参考下吧
    2017-05-05
  • javascript各种复制代码收集

    javascript各种复制代码收集

    javascript各种形式的复制代码效果,有直接复制url,复制文本框中的内容、隐藏表单中的内容,复制span中的内容
    2008-09-09
  • 浅谈js多维数组和hash数组定义和使用

    浅谈js多维数组和hash数组定义和使用

    下面小编就为大家带来一篇浅谈js多维数组和hash数组定义和使用。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-07-07

最新评论