08年中旬在公司做一个OA系统的“权限管理”模块,做到权限的选择设定功能时,VS框架里的TreeView控件明显没法自己实现全选全消,在网上找了不少有关的JS源码,都不太好用,功能不全,于是,就自己仿造着写了一个JS,在这里发出来给大家共享。 // JScript 文件 function getParentByTagName(element,tagName) { var parent = element.parentNode; var upperTagName = tagName.toUpperCase(); while (parent && (parent.tagName.toUpperCase() != upperTagName)) { parent = parent.parentNode ? parent.parentNode : parent.parentElement; } return parent; } function setParentChecked(objNode) { var objParentDiv = getParentByTagName(objNode,"div"); if(objParentDiv == null || objParentDiv == "undefined") return; var objID = objParentDiv.getAttribute("ID"); var objParentCheckBox = document.getElementById(objID.replace("Nodes","CheckBox")); if(objParentCheckBox == null || objParentCheckBox == "undefined") return; if(objParentCheckBox.tagName!="INPUT" && objParentCheckBox.type == "checkbox") return; //add // if (objNode.checked=false) objPraentCheckBox.checked=false; // objParentCheckBox.checked = true; setParentChecked(objParentCheckBox); } function setParentUnChecked(objNode) { var objParentDiv = getParentByTagName(objNode,"div"); if(objParentDiv == null || objParentDiv == "undefined") return; var objID = objParentDiv.getAttribute("ID"); var objParentCheckBox = document.getElementById(objID.replace("Nodes","CheckBox")); if(objParentCheckBox == null || objParentCheckBox == "undefined") return; if(objParentCheckBox.tagName!="INPUT" && objParentCheckBox.type == "checkbox") return; //add // if (objNode.checked=false) objPraentCheckBox.checked=false; objParentCheckBox.checked = false; setParentUnChecked(objParentCheckBox); } function setChildCheckedState(div,state) { var objchild = div.childNodes; var count = objchild.length; for(var i=0;i<objchild.length;i++) { var tempObj = objchild[i]; if(tempObj.tagName=="INPUT" && tempObj.type == "checkbox") { tempObj.checked = state; } // debugger; setChildCheckedState(tempObj,state); } } function TreeNodeChecked() { var objNode = window.event.srcElement; if(objNode.tagName!="INPUT" || objNode.type!="checkbox") return; // debugger; if(objNode.checked == true) { setParentChecked(objNode); } else { setParentUnChecked(objNode); } var objID = objNode.getAttribute("ID"); var objParentDiv = document.getElementById(objID.replace("CheckBox","Nodes")); if(objParentDiv==null || typeof(objParentDiv) == "undefined") return; setChildCheckedState(objParentDiv,objNode.checked); }