<style type="text/css">
.szh_sItem{
background:#f0f0f0;color:#000000;
}
.szh_sItemOver{
background-color:#cccccc;color:#000000;
cursor:hand;
}
</style><script type="text/javascript" src="prototype.js"></script>
<script type="text/javascript">
function creatree(tbl,a){
var tree=Class.create();
tree.prototype={
initialize: function(tbl,aa){
this.a=aa;
this.c=a.length;
this.tbl=tbl;
this.dispitem(this.tbl.rows[0],0);
this.tbl.onclick=this.tclk.bindAsEventListener(this);
this.tbl.onmouseover=this.tover.bindAsEventListener(this);
this.tbl.onmouseout=this.tout.bindAsEventListener(this);
},
tover:function(evt){
var r=Event.element(evt).parentNode;
if(isNaN(parseInt(r.getAttribute('i'))))r=r.parentNode;
r.className='szh_sItemOver';
},
tout:function(evt){
var r=Event.element(evt).parentNode;
if(isNaN(parseInt(r.getAttribute('i'))))r=r.parentNode;
r.className='szh_sItem';
},
menuexec:function(i){
var s=this.a[i][2].split(':',2);
if(s[0].toLowerCase()=='js'){eval(s[1]);}
else {var x=window.open(s[1],s[0]);x.focus();}
},
tclk:function(evt){
var i,r=Event.element(evt).parentNode;
i=parseInt(r.getAttribute('i'));
if(isNaN(i)){
this.expand(r.parentNode);
}
else{
this.menuexec(i);
}
},
dispitem:function(r,i){
var s='',hassub,x;
x=this.a[i][0]>>>6;
hassub=(x&3);
x>>>=2;
//alert(hassub);
r.setAttribute('i',i);
r.className='szh_sItem';
for(var j=1;j<(63&this.a[i][0]);++j,x>>>=1)
s+='<img align="top" src="'+((x&1)+2)+'.gif" />';
s+='<img align="top" id="I'+i+'" align="top" src="'+(i?((hassub<<1)+(x&1)):'root')+'.gif" />'
+(i?'<img id="IF'+i+'" src="f'+hassub+'.gif" />':'')
//+':'+i+':'+this.a[i][0]+':'
+this.a[i][1];
r.cells[0].innerHTML=s;
},
expand:function(row){
var i,ri,j,i1,cell;
i=parseInt(row.getAttribute('i'));
ri=row.rowIndex+1;
if((this.a[i][0]&128)==0)return;
j=(63&this.a[i][0])+1;
this.a[i][0]^=64;
this.dispitem(row,i);
if((this.a[i][0]&64)==0){
for(;;){
if(this.tbl.rows.length<=ri)break;
i1=parseInt(this.tbl.rows[ri].getAttribute('i'));
if((63&this.a[i1][0])<j)break;
this.tbl.deleteRow(ri);
if((this.a[i1][0]&192)==192)this.a[i1][0]^=64;
}
}
else{
for(++i;i<this.c&&(63&this.a[i][0])>=j;++i){
if((63&this.a[i][0])==j){
row=this.tbl.insertRow(ri++);
cell=row.insertCell(0);
this.dispitem(row,i);
}
}}
}
}
var i,j,x;
var c=a.length;
a[0][0]=128;
for(i=1;i<c;++i){
if((63&a[i][0])>(63&a[i-1][0])+1){
alert('菜单数组错误:第'+i+'项跳级-'+a[i][1]);
return -1;
}
else{
a[i][0]|=(i<c-1&&(63&a[i+1][0])>(63&a[i][0]))?128:0;
x=Math.pow(2,(63&a[i][0])+7);
for(j=i-1;j>0&&(63&a[j][0])>(63&a[i][0]);--j){
(a[j][0])|=x;
}if(j>0)a[j][0]|=x;
}
}
return(new tree(tbl,a));
}function init(){
var t1=creatree($('t1'),
[ [0,'root','js:alert("ok");'],
[1,'1baaa','js:alert("ok");'],
[2,'2bdaaa','js:alert("ok");'],
[3,'3aaas','js:alert("ok");'],
[4,'4aaas','js:alert("ok");'],
[4,'4aaas','js:alert("ok");'],
[2,'2bdaaa','js:alert("ok");'],
[3,'3aaas','js:alert("ok");'],
[2,'2cabaa','js:alert("ok");'],
[3,'3aaas','js:alert("ok");'],
[1,'1aaacb','js:alert("ok");'],
[2,'2aaaf','js:alert("ok");'],
[3,'3aaas','js:alert("ok");'],
[1,'1aaad','js:alert("ok");'],
[2,'2cabaa','js:alert("ok");'],
[3,'3aaas','js:alert("ok");'],
[1,'1aaacb','js:alert("ok");'],
[2,'2aaaf','js:alert("ok");'],
[3,'3aaas','js:alert("ok");'],
[1,'1aaad','js:alert("ok");'],
[2,'2cabaa','js:alert("ok");'],
[3,'3aaas','js:alert("ok");'],
[1,'1aaacb','js:alert("ok");'],
[2,'2aaaf','js:alert("ok");'],
[3,'3aaas','js:alert("ok");'],
[1,'1aaad','js:alert("ok");'],
[2,'2cabaa','js:alert("ok");'],
[3,'3aaas','js:alert("ok");'],
[1,'1aaacb','js:alert("ok");'],
[2,'2aaaf','js:alert("ok");'],
[3,'3aaas','js:alert("ok");'],
[1,'1aaad','js:alert("ok");'],
[2,'2cabaa','js:alert("ok");'],
[3,'3aaas','js:alert("ok");'],
[1,'1aaacb','js:alert("ok");'],
[2,'2aaaf','js:alert("ok");'],
[3,'3aaas','js:alert("ok");'],
[1,'1aaad','js:alert("ok");'],
[2,'2aaab','js:alert("ok");'],
[3,'3aaas','js:alert("ok");'],
[4,'4aaas','js:alert("ok");'],
[3,'3aaas','js:alert("ok");'],
[3,'3aaas','js:alert("end");']
]);
}
</script>
<body onload="init()">
<table id="t1" border="0" cellpadding="0" cellspacing="0"><tr class="szh_sItem"><td>root</td></tr></table>
<table id="t2" border="0" cellpadding="0" cellspacing="0"><tr class="szh_sItem"><td>root</td></tr></table>
</body></html>