实现TreeGrid中复选框的级联选择效果(类似zTree的选择效果)

	$(function(){
		//点击多选框,构造类似zTree的级联选择效果
	        $("#div1").on("click","input[type=checkbox]",function(){
	        	var obj = $(this);
	        	var trParent = obj.closest("tr");//从元素本身开始,逐级向上级元素匹配,并返回最先匹配的元素
	        	var id=trParent.attr("id");
	        	
	        	var aList=[];
	        	var arr=id.split("_");
	        	var strP = arr[0];
	        	
	        	for(var i=1;i<arr.length-1;i++){
	        		strP = strP+"_"+arr[i];
	        		aList.push(strP);//依次找到当前节点所有的父辈节点
	        	}	
	        	if(obj.is(":checked")){
	        		downSelect(id);
	        		upLevSelect(aList);
	        	}else{
	        		downCancel(id);
	        		upLevCancel(aList);
	        	}	
	        	//设置所有父辈节点为选中状态
	        	function upLevSelect(list){
	        		for(var i=0,len=list.length;i<len;i++){
	        			$("#"+list[i]).find(":checkbox").prop("checked",true);//设置所有多选框为选中状态
	        		}	
	        	}	
	        	//设置当前节点的所有后代子节点为选中状态
	        	function downSelect(id){
	        		$("[id^='"+id+"_']").each(function(index,domEle){
	        			$(domEle).find(":checkbox").prop("checked",true);
	        		});
	        	}	
	        	//设置所有父辈节点为非选中状态
	        	function upLevCancel(list){
	        		var pid;
	        		var len = list.length;
	        		for(var j=1;j<=len;j++){
	        			var siblingsList=$("[data-pid="+list[len-j]+"] :checkbox:checked");
	        			if(siblingsList.size()==0){
	        				$("#"+list[len-j]).find(":checkbox").prop("checked",false);
	        			}else{
	        				break;
	        			}
	        		}
	        	}
	        	//设置当前节点的所有后代子节点为非选中状态
	        	function downCancel(id){
	        		$("[id^='"+id+"_']").each(function(index,domEle){
	        			$(domEle).find(":checkbox").prop("checked",false);
	        		});
	        	}
	        });
	});

执行效果如下:


此外,上述代码中,要学习jQuery的常见的选择器,常见函数以及循环遍历元素的方法:

find(":checkbox") ,
on("click","input[type=checkbox]",function(){}),
closest("tr"),
$("[data-pid="+list[len-j]+"] :checkbox:checked"),
attr及prop

 
 
each(function(index,domEle){}),
 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值