需要实现的功能:选中父节点对应子节点全选;不选中父节点,对应子节点也不选中
如下图所示,选中车队,对应车队中车辆也全部选中,以实现车队中所有车辆在地图上的显示。

选中cqupt1,则对应所有成员car1,car2自动选中,地图上显示车队中的所有车辆位置信息

解决办法:

车队对应的id为team_id,车辆对应的id为veh_id,在每个车队中,所有车辆对应同一个team_id

1、首先在TeamTree.aspx.cs文件中
把team_id从父节点函数中传递到子节点函数中,
再给该车队每个成员定义一个共同的标签名称team_id,这样car1/car2/car3三个车有个共同的标签team_id :
sb_TreeNode.Append("<div class='" + strclass + "'><input id='" + entity.team_id + "' type='checkbox' /><span>" + entity.team_name + "</span></div>");
选中team_id,对应的member_id都选中,并传递member_id,而不传递team_id。而上面的程序直接把id传出
对应代码如下:
  1. /// <summary>
  2. /// 创建子节点
  3. /// </summary>
  4. /// <param name="list">list</param>
  5. /// <returns></returns>
  6. public string GetTreeNode(IList list)
  7. {
  8. Info_Veh_Team info_veh_team = new Info_Veh_Team();
  9. StringBuilder sb_TreeNode = new StringBuilder();
  10. List<Info_Veh_Team> itemNode = IListHelper.IListToList<Info_Veh_Team>(list);
  11.  
  12. int index1 = ;
  13. string strclass = "";
  14. if (itemNode.Count > )
  15. {
  16. sb_TreeNode.Append("<ul>");
  17. foreach (Info_Veh_Team entity in itemNode)
  18. {
  19. if (index1 == )
  20. strclass = "collapsableselected";
  21. else
  22. strclass = "";
  23. sb_TreeNode.Append("<li>");
  24. sb_TreeNode.Append("<div class='" + strclass + "'><input id='" + entity.team_id + "' type='checkbox' id1='" + index1 + "' /><span>" + entity.team_name + "</span></div>");
  25.  
  26. info_veh_team = info_veh_teamibll.GetEntity(entity.team_id);
  27. StringBuilder where = new StringBuilder();
  28. where.Append("and team_id='" + info_veh_team.team_id + "'");
  29. IList nextlist = info_team_memberibll.GetListWhere(where, null);
  30. sb_TreeNode.Append(GetTreeNodeNext(nextlist, index1));
  31. sb_TreeNode.Append("</li>");
  32. index1++;
  33. }
  34. sb_TreeNode.Append("</ul>");
  35. }
  36. return sb_TreeNode.ToString();
  37. }
  38. /// <summary>
  39. /// 创建子节点
  40. /// </summary>
  41. /// <param name="list">list</param>
  42. /// <returns></returns>
  43. public string GetTreeNodeNext(IList list, int index1)
  44. {
  45. StringBuilder sb_TreeNode = new StringBuilder();
  46. List<Info_Team_Member> itemNode = IListHelper.IListToList<Info_Team_Member>(list);
  47. int index = ;
  48. string strclass = "";
  49. if (itemNode.Count > )
  50. {
  51. sb_TreeNode.Append("<ul>");
  52. foreach (Info_Team_Member entity in itemNode)
  53. {
  54. if (index == )
  55. strclass = "collapsableselected";
  56. else
  57. strclass = "";
  58. sb_TreeNode.Append("<li>");
  59. sb_TreeNode.Append("<div class='" + strclass + "'><input id='" + entity.member_id + "' type='checkbox' name='" + index1 + "' id2='" + index1 + "' id3='" + entity.veh_lpn + "'/><span>" + entity.veh_lpn + "</span></div>");
  60. sb_TreeNode.Append("</li>");
  61. index++;
  62. }
  63. sb_TreeNode.Append("</ul>");
  64. }
  65. return sb_TreeNode.ToString();
  66. }
2、具体的复选框选中在js里面去实现,也就是TeamTree.aspx中去实现(选中父则子全选中)
在TeamTree.aspx中,先是把复选框选中的所有元素保存到数组中,界面点击传出的选中的结果,对应实现应该勾选的各结果
  1. $('.strTree li div input:checkbox').click(function () {//问题:如何实现选中车队,对应成员全部选中,并传对应所有成员的member_id,而不是传team_id
  2.  
  3. team_id = document.getElementsByName($(this).attr('id1')); //通过name 获取name='team_id'的子元素 ($(this).attr('id'))为被选中的车队名
  4. team = document.getElementById($(this).attr('id')); //通过id获取 获取的是被勾选的车队或者车辆的id
  5. if (team.checked) {
  6. for (i = ; i < team_id.length; i++) {
  7. team_id[i].checked = true;
  8. }
  9. } else {
  10. for (i = ; i < team_id.length; i++) {
  11. team_id[i].checked = false;
  12. }
  13. }
  14.  
  15. //alert(team_id.length);
  16. var indexs = [];
  17. var vehIds = [];
  18. $(".strTree li div input:checkbox:checked").each(function (i) { //由于复选框选中多个,所以循环输出
  19. v = document.getElementsByName($(this).attr('id1'));
  20. //alert("v的值" + v.length);
  21. if (v.length == ) {
  22. //vehIds[i] = $(this).attr('id2') + "|" + $(this).attr('id3');
  23. indexs[i] = $(this).attr('id2');
  24. vehIds[i] = $(this).attr('id3');
  25. }
  26. //vehIds[i] = $(this).attr('id'); //attr() 方法设置或返回被选元素的属性值
  27.  
  28. });
  29. for (var i = ; i < indexs.length; i++) { //清除vehIds[]中的所有空字符串
  30. if (indexs[i] == '' || indexs[i] == null || typeof (indexs[i]) == undefined) {
  31. indexs.splice(i, );
  32. i = i - ;
  33. }
  34. }
  35. for (var i = ; i < vehIds.length; i++) { //清除vehIds[]中的所有空字符串
  36. if (vehIds[i] == '' || vehIds[i] == null || typeof (vehIds[i]) == undefined) {
  37. vehIds.splice(i, );
  38. i = i - ;
  39. }
  40. }
  41. self.vehIds = vehIds;
  42. self.indexs = indexs;
  43.  
  44. var path = 'TeamMap.aspx';
  45. window.parent.frames['target_right'].location = path;
  46. Loading(true);
  47. });

调试结果:

参考实例:
参考网址:
 
 

Web网页树形列表中实现选中父节点则子节点全选和不选中父则子全不选的更多相关文章

  1. 20150812 Asp.net 父窗体获取子窗体的返回值,更新父窗体文本控件(应用)

    1. 父窗体 **************************************** using System;using System.Collections;using System.C ...

  2. C#中treeview的问题,如何区分根节点和子节点以及根节点和根节点的兄弟节点?

    根节点的Level属性为0,一级子节点Level属性为1,二级子节点Level属性为2,以此类推:同级节点可以用索引.名称.文本来区分.用索引区分根节点时,TreeView.Nodes[0]就是第一个 ...

  3. 总结获取原生JS(javascript)的父节点、子节点、兄弟节点

    关于原生JS获取节点,一直是个头疼的问题,而且调用方法的名字又贼长了,所以我选择用JQ,好像跑题了-- 话不多说看代码 获取父节点 及 父节点下所有子节点(兄弟节点) <ul> <l ...

  4. zTree实现清空选中的第一个节点的子节点

    zTree实现清空选中的第一个节点的子节点 1.实现源代码 <!DOCTYPE html> <html> <head> <title>zTree实现基本 ...

  5. SqlServer父节点与子节点查询及递归

    在最近老是用到这个SQL,所以记下来了: 1:创建表 CREATE TABLE [dbo].[BD_Booklet]( [ObjID] [int] IDENTITY(1,1) NOT NULL, [P ...

  6. 包含mysql 递归查询父节点 和子节点

    包含mysql 递归查询父节点 和子节点 mysql递归查询,查父集合,查子集合 查子集合 --drop FUNCTION `getChildList` CREATE FUNCTION `getChi ...

  7. Jquery选择器之父节点的子节点

    今天review代码,发现有哥们这么写 var span = $($("span"),$("#main")); 我百思不得其解,$(a,b)又好像在哪里见过,后 ...

  8. cocos2d-x 父节点和子节点执行不同动作

    Test6::Test6() { CCSprite* sp1 = CCSprite::create(s_pPathSister1); CCSprite* sp11 = CCSprite::create ...

  9. ztree 获取当前选中节点的子节点集合

    功能:获取当前选中节点的子节点id集合. 步骤:1.获取当前节点 2.用ztree的方法transformToArray()获取当前选中节点(含选中节点)的子节点对象集合. 3.遍历集合,取出需要的值 ...

随机推荐

  1. LXC学习实践(2)安装LXC

    1.准备工作: yum install gcc yum install libcap-devel yum install libcgroup 2.安装LXC 下载源代码:sourceforge.net ...

  2. HTML的水平居中和垂直居中解决方案

    水平居中:给div设置一个宽度,然后添加margin:0 auto属性 div{ width:200px; margin:0 auto; } 让绝对定位的div居中 div { position: a ...

  3. linux系统命令学习系列-定时任务crontab命令

    上节内容复习: at命令的使用 作业:创建一个任务10分钟后关机 at now+10 minutes at>shutdown at><EOT> 本节我们继续来说例行任务管理命令 ...

  4. RxJava系列1(简介)

    RxJava系列1(简介) RxJava系列2(基本概念及使用介绍) RxJava系列3(转换操作符) RxJava系列4(过滤操作符) RxJava系列5(组合操作符) RxJava系列6(从微观角 ...

  5. Spring整合MyBaytis

    1.准备jar包 A.第一种方式:配置SqlSessionFactoryBean+配置SqlSessionTemplate a.项目结构 b.applicationContext.xml  带详细注释 ...

  6. Codeforces Round #436 (Div. 2) B. Polycarp and Letters

    http://codeforces.com/contest/864/problem/B 题意: 给出一个字符串,要求找到一个集合S,使得从S中选出的所有数,在这些数的位置上的字母全部为小写且是不同的字 ...

  7. cdoj 1092 韩爷的梦

    http://acm.uestc.edu.cn/#/problem/show/1092 题意:略 思路: 做的第一道字符串hash的题,真是菜啊,还是看了几篇题解才会做的.字符串hash感觉就是函数的 ...

  8. python中文编码坑

    打印list的时候unicode对象不会自动转为中文!

  9. POJ-1511 Invitation Cards---Dijkstra+队列优化+前向星正向反向存图

    题目链接: https://vjudge.net/problem/POJ-1511 题目大意: 给定节点数n,和边数m,边是单向边. 问从1节点出发到2,3,...n 这些节点路程和从从这些节点回来到 ...

  10. Why deep learning?

    1. 深度学习中网络越深越好么? 理论上说是这样的,因为网络越深,参数也越多,拟合能力也越强(但实际情况是,网络很深的时候,不容易训练,使得表现能力可能并不好). 2. 那么,不同什么深度的网络,在参 ...