关于合成模式的javascript的一个treeview例子

合成模式的意思是说用一个对象加载另外一个对象进来而形成的,非常适合树型结构,也很类似链表结构

下面举一个我写的javascript的treeview做例子

   var treebase = {
 rootnum        : 0 
};

   function treeview(nodetxt,nodehref,nodetag){
     this.childNodes=[];
  this.txt=nodetxt;
  if(nodehref==null)
   this.href="";
  else
  this.href=nodehref;
  this.target=nodetag;
  if(this.parentNode==null)
  {
    this.id="root_"+treebase.rootnum;
    treebase.rootnum=treebase.rootnum+1;
  }
 }

   treeview.prototype.toString=function(){
      var str="<div>";
   var c_node=this;
   while(c_node.parentNode)
   {
      str=str+"1";
   c_node=c_node.parentNode;
   }
   if (this.childNodes.length!=0)
   {
    if(this.href.length>0)
   str=str+"<a href='"+this.href+"' target='"+this.target+"' οnclick=/"javascript:showdiv('"+this.id+"_child')/">"+this.txt+"</a>";
    else     
   str=str+"<a href=/"javascript:showdiv('"+this.id+"_child')/">"+this.txt+"</a>";
    }
    else
    {
        if(this.href.length>0)
   str=str+"<a href='"+this.href+"' target='"+this.target+"'>"+this.txt+"</a>";
    else     
   str=str+this.txt;
  }  
  
    
   if (this.childNodes.length!=0)
   {
     str=str+"<div style=/"display:none;/" id=/""+this.id+"_child/">";
  
   //var save_pos=new Array();
  // save_pos.add(this.id);
    for(var int_len=0;int_len<this.childNodes.length;int_len++)
   { 
   //save_pos.push(this.id,int_len);
   str=str+this.childNodes[int_len];
   //int_len=save_pos.find(this.id);
    }  
  str=str+"</div>";
   }
  
   str=str+"</div>";
   return str;
   }

   function showdiv(div_id){
    var obj_id=document.getElementById(div_id);
 obj_id.style.display=(obj_id.style.display=='none'?'block':'none');
   }

   treeview.prototype.add=function(node){
     node.parentNode=this;
     this.childNodes[this.childNodes.length]=node;
  if (node.childNodes.length==0)
  {
    node.id=this.id+"_child"+this.childNodes.length;    
   }
  if(node.target==null){
   node.target=this.target;
  }
   } 

 

这里就是用parentNode记录当前对象而形成了一个双链结构

用的时候

var node1=new treeview("node1");
var node2=new treeview("node2");
node1.add(node2);
document.write(node1);
这样就可以了

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值