唉,很久以前写的代码,晒一晒,估计自己看都看不懂了,:(

var head="display:''"
img_close=new Image()
img_close.src="/sysManage/images/f.gif"
img_open=new Image()
img_open.src="/sysManage/images/fo.gif"
img3=new Image()
img3.src="/sysManage/images/e.gif";
var elment = img_close.src
function onMouseDown(){
if(!document.all)return
var eventObj = event.srcElement;
if(eventObj.tagName=="IMG" ) {
//判断是否存在子节点
var ***c = eventObj.src ;
if(***c == null || ***c.length<=0)return;
if(***c.indexOf("e.gif") >= 0)return;
if(***c.indexOf("f")<0 && ***c.indexOf("tree-site")<0 )return;
var nOffIndex = 2;
var srcIndex = eventObj.sourceIndex;
var nested = document.all[srcIndex + nOffIndex];
if(nested.tagName!="DL"){
nested = document.all[srcIndex + 1];
}
if (nested.style.display=="none") {
nested.style.display='inline';
if(***c.indexOf("f.gif")>0)
eventObj.src = img_open.src;
}
else {
nested.style.display="none";
if(***c.indexOf("fo.gif")>0)
eventObj.src = img_close.src;
}
}else if(eventObj.tagName == "A" ){//相应节点的点击
var nChnlId = parseInt(eventObj.name);
if(!isNaN(nChnlId)){
onClickChannel(nChnlId);
}
}
}
/** 选中某个节点下的所有子节点(主要用于权限树的选择).
* @param obj 节点选择框对象(checkbox对象)
*根据所选节点的值,遍历整个树,从而选中满足条件的节点.
*/
/*
function checkNode(obj) {
for (var i=0;i<form1.chkID.length;i++)
{
if (form1.chkID[i].value.length > obj.value.length && form1.chkID[i].value.substring(0,obj.value.length) == obj.value)
{
if(obj.checked)
{
form1.chkID[i].checked = true;
}
else
{
form1.chkID[i].checked = false;
}
}
}
}
*/
function checkNode(obj)
{
var elm = obj.parentNode;
checkChildrenRecurve(elm);
//checkRootRecurve(document.getElementById("root"));
}
function checkChildrenRecurve(elm)
{
var dd = elm;
var dl = dd.lastChild;
if (dl.tagName != "DL") return;
var ddlist = dl.children;
for (var i=0;i<ddlist.length;i++)
{
ddlist[i].firstChild.checked=elm.firstChild.checked;
checkChildrenRecurve(ddlist[i].firstChild.parentNode)
}
}
function checkRootRecurve(dl)
{
if (dl.tagName != "DD")
{
dl.parentNode.firstChild.firstChild.allChecked = dl.parentNode.firstChild.firstChild.checked;
dl.parentNode.firstChild.firstChild.allUnChecked = !dl.parentNode.firstChild.firstChild.checked;
return;
}
var lis = dl.children;
var allChecked = true;
var allUnChecked = true;
for (var i=0;i<lis.length;i++)
{
checkRootRecurve(lis[i].lastChild);
allChecked = allChecked && lis[i].firstChild.firstChild.checked && lis[i].firstChild.firstChild.allChecked;
allUnChecked = allUnChecked && !lis[i].firstChild.firstChild.checked && lis[i].firstChild.firstChild.allUnChecked;
}
dl.parentNode.firstChild.firstChild.allChecked=allChecked;
dl.parentNode.firstChild.firstChild.allUnChecked=allUnChecked;
if (allChecked || allUnChecked)
{
dl.parentNode.firstChild.firstChild.checked=allChecked;
dl.parentNode.firstChild.firstChild.disabled=false;
dl.parentNode.firstChild.childStatus=false;
}
else
{
dl.parentNode.firstChild.firstChild.disabled=true;
dl.parentNode.firstChild.childStatus=true;
dl.parentNode.firstChild.firstChild.checked=true;
}
}
document.
/**
*如果所有子节点都被选中,然么父节点也要选中
*output:无
*/
function selParentNode(nodeIDStr,spltStr){
var nodeLen=nodeIDStr.length;
var nodeList;
if(nodeLen<1){
return;
}
nodeIDList = nodeIDStr.split(spltStr);
for (j=0;j<nodeIDList.length;j++)
{
if(checkSubNode(nodeIDList[j]))
{
for (var k=0;k<form1.chkID.length;k++)
{
if(form1.chkID[k].value == nodeIDList[j] )
{
form1.chkID[k].checked = true;
break;
}
}
}
}
}

/**
* 判断某个节点值下的所有子节点是否被选中(主要用于权限树的选择).
* curNodeID 某个节点的值
*output:true 或 false
**/
function checkSubNode(curNodeID) {
for (var i=0;i<form1.chkID.length;i++)
{
if (form1.chkID[i].value.substring(0,curNodeID.length) == curNodeID && form1.chkID[i].value.length >= (curNodeID.length +2) )
{
if(!form1.chkID[i].checked )
{
return false;
}
}
}
return true;
}
 

一个带CheckBox的树形目录的递归算法(javascript)相关推荐

  1. 带CheckBox的CListCtrl,源码可下载

    实现了一个带CheckBox的CListCtrl,源码可从http://d.download.csdn.net/down/2804276/JoeBlackzqq下载.

  2. Qt之QSS:带CheckBox的QGroupBox及其样式设计

    前言 在引入QGroupBox的QSS时,会出现下图中的三种问题,导致界面显示极其丑陋.所以要改变QSS设置使界面更bf~ 图a 左边显示问题 图b 标题下沉问题 图c 不对称 下面是两个方式改变QS ...

  3. asp mysql 可编辑树状,基于数据库动态生成树形目录-ASP教程,数据库相关

    一. 目录树的广泛应用 为了这段内容,在百度上搜了搜,内容一大通,相关的竟没有.搜什么搜嘛?用处不是明摆着吗?资源管理器文件夹的管理,论坛中多级论坛的管理,java中的awt正是缺乏包括树形目录这样的 ...

  4. Silverlight Telerik控件学习:带CheckBox复选框的树形TreeView控件

    在web开发中,带checkbox的tree是一个很有用的东东,比如权限选择.分类管理,如果不用sl,单纯用js+css实现是很复杂的,有了SL之后,就变得很轻松了 解决方案一: 利用Silvelri ...

  5. android 树形目录结构的实现(包含源码)

    1.效果如图 ,老板的需求: 1.各种群按照树形目录展开 2.点击列表可以收缩展开 3.选中后进行筛选 2.分析下思路 每个数据都应该有个根节点,也就是上级目录.确定了上级目录就可以找到当前数据对应的 ...

  6. WPF MVVM模式 带CheckBox的树形图

    前不久做项目中有设计到树形图,还是带CheckBox的树形图,可伤我这种小白的脑筋了,上网找了好多资料参考写出来了,下面来看一下: 首先看这个带CheckBox树形图长啥样,只是一个简单的二级菜单,如 ...

  7. element做树形下拉_一个基于 elementUi 的树形下拉框组件vue

    wl-vue-select,wl-tree-select 简介 用于vue框架的树形下拉框及带全选的普通下拉框. Tree drop-down box for vue framework and or ...

  8. Java实现遍历N级树形目录结构

    最近挺忙,一直在做项目,然后有个树形目录结构需要返回给前端,这里给大家说一下实现的思路. 具体达到的效果类似: 一级目录A: 二级目录A: 三级目录: 四级目录: 文件.txt 二级目录B: 文件1. ...

  9. WPF 带CheckBox、图标的TreeView

    WPF 带CheckBox.图标的TreeView 在WPF实际项目开发的时候,经常会用到带CheckBox的TreeView,虽然微软在WPF的TreeView中没有提供该功能,但是微软在WPF中提 ...

最新文章

  1. 【数据分析】Python :知乎数据清洗整理和结论研究
  2. 【转】使用python3的typing模块提高代码健壮性
  3. VMware QueryPerformanceCounter/GetTickCount 悬案
  4. 如何处理高并发情况下的DB插入
  5. android doze模式源码分析,Android Doze模式启用和恢复详解
  6. 应该掌握的神奇函数——sscanf的用法
  7. 问题:从键盘读取特定类型的数据(使用Scanner读取int类型)
  8. [JavaWeb-HTML]HTML标签_块标签
  9. switch 字符串 java_JDK7新特性switch支持字符串
  10. Android广播(笔记)
  11. pandas Dataframe表格转Markdown格式
  12. Jenkins 配置mirrors
  13. (executor 1 exited caused by one of the running tasks) Reason: Executor heartbeat timed out after
  14. 价值连城的精确短线交易技术--Gartley“222”
  15. 感悟篇:我在B端做数据分析(一)
  16. Python3 根据m3u8下载视频,批量下载ts文件并且合并
  17. 短期目标:三月、四月、五月
  18. Gunicorn-使用详解
  19. 风控基础——风控模型、规则、策略的区别
  20. UPS不间断电源调试注意事项

热门文章

  1. 强化学习Q-Learning算法及实现详解
  2. Go Web编程--SecureCookie实现客户端Session管理
  3. MS CRM 2011 如何创建基于SQL的自定义报表,并使用数据预筛选(Pre-Filtering)
  4. dubbo的Extension源码分析
  5. 现代操作系统-进程与线程
  6. Ubuntu14.04部署CEPH
  7. hadoop框架详细分析
  8. Centos安装NFS服务器配置及挂载教程
  9. 在win7下安装VC6.0
  10. NandFlash启动理解(S3C2410)