转(https://www.augsky.com/992.html)

选中父节点时,父节点下所有子节点也都全部选中

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);
}
}
}

最新文章

  1. Mac OS下基于Eclipse的Android调试环境搭建
  2. PHP Socket实现websocket(三)Stream函数
  3. 开源PLM软件Aras详解三 服务端简易开发
  4. Creating a web server in pure C(c/c++ 写web server)
  5. mysql case when then else end 用法
  6. HTML系列(五):超链接
  7. SQL开发中容易忽视的一些小地方(六)
  8. Java实现压缩文件与解压缩文件
  9. 深入理解计算机系统(2.3)------布尔代数以及C语言运算符
  10. 框架应用 : Spring开发详述
  11. 在 Windows 上可以用 Docker 吗?
  12. 2018 ACM 网络选拔赛 南京赛区
  13. js中setInterval和setTimeout区别和用法
  14. Svn在eclipse中使用
  15. PyQt4颜色对话框QColorDialog
  16. 【题解】洛谷P1080 [NOIP2012TG] 国王游戏(贪心+高精度)
  17. 【Android XML】Android XML 转 Java Code 系列之 Selector(2)
  18. 【FinancialKnowledge】拨备
  19. Bootstrap-table学习笔记(二)——前后端分页模糊查询
  20. linux 命令——17 whereis(转)

热门文章

  1. 页面布局 ——图片自动按比例显示&amp;&amp;图片随外部div的增大而按比例增大
  2. Linux下安装gradle
  3. python 使用pip安装使用国内镜像加速下载安装包的方法
  4. shiro注解
  5. LeetCode - Backspace String Compare
  6. AE插件:能量激光描边光效特效Saber Mac汉化版
  7. MySQL 表字段操作
  8. Spring AOP详解
  9. How To Add Custom Build Steps and Commands To setup.py
  10. java8_api_日期时间