html递归目录树,一个带CheckBox的树形目录的递归算法(javascript)

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

var head="display:''"

img_close=new Image()

img_close.src="/sysManage/p_w_picpaths/f.gif"

img_open=new Image()

img_open.src="/sysManage/p_w_picpaths/fo.gif"

img3=new Image()

img3.src="/sysManage/p_w_picpaths/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

{

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[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

{

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

{

if(checkSubNode(nodeIDList[j]))

{

for (var k=0;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

{

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;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值