$(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){}),