shawl.qiu Javascript DOM 树形结构显示类 DomTree class v1.0

本文介绍了一个使用JavaScript实现的DOM树形结构显示类DomTree,它可以递归地枚举和展示网页中DOM节点的层级结构,并提供了节点展开、属性查看等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

shawl.qiu Javascript DOM 树形结构显示类 DomTree class v1.0


说明:
这个东西其实没啥用途, 写的原因嘛, 当然也有的...
记得刚学JS时, 想遍历枚举 dom 的节点, 并递增显示缩进和节点名出来, 可是弄了N久, 还是没法子...
今天偶然想起了上面那想法, 呵呵, 当然就动手啦, 写起了跟切菜一样, 一会就搞定....

目录:
1. 调用
2. DomTree 核心代码

下载: http://shawl.qiu.googlepages.com/sq_js_DomTree_v1.0.7z
 演示: http://shawl.qiu.googlepages.com/DomTree.htm

shawl.qiu
2007-05-26
http://blog.youkuaiyun.com/btbtd

内容:
1. 调用
  1. <script type="text/javascriptsrc="DomTree_v1.0.js"></script>
  2. <script type="text/javascript">
  3. //<![CDATA[
  4.  onload =
  5.   function()
  6.   {
  7.    var domtree = new DomTree();
  8.    
  9.     domtree.Container = document.getElementById("DomTreeId");
  10.     domtree.Body = document.getElementById("EnumMain");
  11.     
  12.     document.title = domtree.au.Subject+" "+domtree.au.Version;
  13.     
  14.     domtree.Go();
  15.     domtree = null;
  16.   }
  17. //]]>
  18. </script>

2. DomTree 核心代码
  1.  /*-----------------------------------------------------------------------------------*/
  2.   * shawl.qiu Javascript DomTree class v1.0
  3.  /*-----------------------------------------------------------------------------------*/
  4.  //---------------------------------begin class DomTree()-------------------------------//
  5.  function DomTree()
  6.  { // shawl.qiu code
  7.   //------------------------------------begin public variable
  8.   //---------------begin about
  9.   this.au = {}
  10.   this.au.Subject = "shawl.qiu Javascript DomTree class";
  11.   this.au.Version = "v1.0";
  12.   this.au.Name = "shawl.qiu";
  13.   this.au.Email = "shawl.qiu@gmail.com";
  14.   this.au.Blog = "http://blog.youkuaiyun.com/btbtd";
  15.   this.au.CreatedDate = "2007-5-26";
  16.   this.au.Update = {};
  17.   this.au.Update["1"] = "";
  18.   //---------------end about
  19.   
  20.   this.Container = null;
  21.   this.Body = document.body;
  22.   
  23.   this.Extend = {}
  24.   this.Extend.Bool = false;
  25.   
  26.   this.Extend.Symbol = {}
  27.   this.Extend.Symbol.True = "- ";
  28.   this.Extend.Symbol.False = "+ ";
  29.   
  30.   
  31.   this.ClassName = {}
  32.   this.ClassName.CommonPrefix = "MyDomTree";
  33.   this.ClassName.Extend = "ExtendTree";
  34.   this.ClassName.UnExtend = "UnExtendTree";
  35.   
  36.   this.Level = {}
  37.   this.Level.Prefix = "&nbsp;&nbsp;";
  38.   this.Level.DisplayCount = false;
  39.   
  40.   this.Popup = {}
  41.   this.Popup.Prefix = "Popup";
  42.   this.Popup.Main = null;
  43.   //------------------------------------end public variable
  44.   
  45.   //------------------------------------begin private variable
  46.   var Tl = this;
  47.   var pSymbol = "";
  48.   var pPopup = null;
  49.   //------------------------------------end private variable
  50.   
  51.   //------------------------------------begin public method
  52.   this.Go = fGo;
  53.   //------------------------------------end public method
  54.  
  55.   //------------------------------------begin private method
  56.   function fGo()
  57.   { 
  58.    var StartTime = new Date();
  59.    
  60.    if(typeof(Tl.Container)=="string")
  61.    {
  62.     Tl.Container = document.getElementById(Tl.Container);
  63.    }
  64.    
  65.    if(Tl.Container==null)
  66.    {
  67.     alert("无法获得容器对象!");
  68.     return;
  69.    }
  70.    
  71.    if(Tl.Body==null)
  72.    {
  73.     alert("目标节点为null!");
  74.     return;
  75.    }
  76.    
  77.    if(Tl.Body.nodeType!=1)
  78.    {
  79.     alert("目标节点不是HTML元素!");
  80.     return;
  81.    }
  82.    
  83.    fAppendCss();
  84.    
  85.    if(Tl.Extend.Bool)
  86.    {
  87.     pSymbol = Tl.Extend.Symbol.True;
  88.    }
  89.    else
  90.    {
  91.     pSymbol = Tl.Extend.Symbol.False;
  92.    }

  93.    if(!Tl.Body.hasChildNodes()) return;
  94.    
  95.    var TopEle = document.createElement("div");
  96.    
  97.    if(Tl.Extend.Bool)
  98.    {
  99.     TopEle.className = Tl.ClassName.Extend; 
  100.    }
  101.    else
  102.    {
  103.     TopEle.className = Tl.ClassName.UnExtend; 
  104.    }
  105.    
  106.    var sCount = "";
  107.    
  108.    if(Tl.Level.DisplayCount)
  109.    {
  110.     sCount = 1+". ";
  111.    }
  112.    
  113.    var EleA = document.createElement("a");
  114.    
  115.    EleA.innerHTML = fRepeatStr(Tl.Level.Prefix, 1)+sCount+pSymbol+Tl.Body.tagName;
  116.    EleA.innerHTML += " (<font color='red'>"+fGetHtmlElementLen(Tl.Body)+"</font>)";
  117.    EleA["Extend"] = Tl.Extend.Bool;
  118.    EleA["onclick"] = fClick;
  119.    
  120.    TopEle["Object"] = Tl.Body;
  121.    TopEle.appendChild(EleA);

  122.    if(Tl.Body.id!="") EleA.innerHTML += " -&gt; <span style='color:blue'>"+Tl.Body.id+"</span>";
  123.    if(Tl.Body.name) EleA.innerHTML += " -&gt; <span style='color:blue'>"+Tl.Body.name+"</span>";
  124.    
  125.    fIntiFunc(TopEle, Tl.Body);

  126.    Tl.Container.appendChild(TopEle);
  127.    
  128.    var PopupEle = document.createElement("div");
  129.    PopupEle.id = Tl.Container.id+Tl.Popup.Prefix;
  130.    PopupEle.style.display = "none";
  131.    Tl.Container.appendChild(PopupEle);
  132.    
  133.    Tl.Popup.Main = document.getElementById(Tl.Container.id+Tl.Popup.Prefix);
  134.    Tl.Popup.Main.ondblclick =
  135.     function()
  136.     {
  137.      this.style.display = "none";
  138.     }
  139.    pPopup = Tl.Popup.Main;
  140.    pPopup.title = "双击隐藏";
  141.     
  142.    fGetNode(TopEle, Tl.Body, 1);
  143.    
  144.    var EndTime = new Date();
  145.    
  146. /*
  147.    onunload = 
  148.     function()
  149.     {
  150.      defaultStatus = "正在修复IE内存溢漏, 请稍候...";
  151.      fFixMemoryLeak();
  152.     }
  153. */
  154.    
  155.    defaultStatus = "DomTree 耗时: "+(EndTime-StartTime)+" 毫秒";
  156.    
  157.   } // end function fGo
  158.   
  159.   function fGetNode(EleContainer, EleBody, iLevel)
  160.   {
  161.    if(EleBody.nodeType!=1) return;
  162.    var iNextLevel = iLevel+1;
  163.    var iCount = 1;
  164.    
  165.    var MyCallee = arguments.callee;
  166.     
  167.    ( // begin anonymous function
  168.     function()
  169.     {
  170.      var EleBodyLen = EleBody.childNodes.length;
  171.      var EleBodyCount = 0;
  172.      
  173.      while(EleBodyCount<EleBodyLen)
  174.      {
  175.       var CurEle = EleBody.childNodes[EleBodyCount];
  176.       
  177.       if(CurEle.nodeType==1)
  178.       {
  179.        var MyEleA = document.createElement("a");
  180.         MyEleA["onclick"] = fClick;
  181.         MyEleA["Extend"] = Tl.Extend.Bool;
  182.        
  183.        var sCount = "";
  184.        
  185.        if(Tl.Level.DisplayCount)
  186.        {
  187.         sCount = iNextLevel+"."+(iCount++)+" ";
  188.        }
  189.        
  190.        var sSymbol = "&nbsp;&nbsp;&nbsp;";
  191.        var bHasChild = fCheckHasHtmlElement(CurEle);
  192.        if(bHasChild)
  193.        {
  194.         sSymbol = pSymbol;
  195.        }
  196.        
  197.        MyEleA.innerHTML = 
  198.        fRepeatStr(Tl.Level.Prefix, iNextLevel)+sCount+sSymbol+CurEle.tagName;
  199.        
  200.        if(bHasChild)
  201.        {
  202.         MyEleA.innerHTML += " (<font color='red'>"+fGetHtmlElementLen(CurEle)+"</font>)";
  203.        }
  204.        
  205.        if(CurEle.id!="") MyEleA.innerHTML += " -&gt; <span style='color:blue'>"+CurEle.id+"</span>";
  206.        if(CurEle.name) MyEleA.innerHTML += " -&gt; <span style='color:blue'>"+CurEle.name+"</span>";
  207.        
  208.        var NextContainerEle = document.createElement("div");
  209.         NextContainerEle.appendChild(MyEleA);
  210.         NextContainerEle["Object"] = CurEle;
  211.         
  212.        fIntiFunc(NextContainerEle, CurEle);
  213.         
  214.        if(Tl.Extend.Bool)
  215.        {
  216.         NextContainerEle.className = Tl.ClassName.Extend; 
  217.        }
  218.        else
  219.        {
  220.         NextContainerEle.className = Tl.ClassName.UnExtend; 
  221.        }
  222.        
  223.        if(CurEle.hasChildNodes())
  224.        {
  225.         MyCallee(NextContainerEle, CurEle, iNextLevel);
  226.        }
  227.        EleContainer.appendChild(NextContainerEle);
  228.       }
  229.        
  230.       EleBodyCount++;
  231.      }
  232.     }() 
  233.    ); // end anonymous function
  234.   }
  235.   
  236.   function fIntiFunc(Ele, EleBody)
  237.   {
  238.    var TextEle = document.createTextNode("  ");
  239.    Ele.appendChild(TextEle);
  240.    
  241.    Ele["ExtendAll"] = Tl.Extend.Bool;
  242.    
  243.    var HasChild = fCheckHasHtmlElement(EleBody);
  244.    
  245.    if(HasChild)
  246.    {
  247.     var ExpendAllEle = document.createElement("span");
  248.     ExpendAllEle.innerHTML = "&#9654";
  249.     ExpendAllEle.title = "展开/关闭所有子节点.";
  250.     ExpendAllEle["onclick"] = fExtendAll;
  251.     
  252.     Ele.appendChild(ExpendAllEle);
  253.    } // end if
  254.    
  255.    var EleProp = document.createElement("span");
  256.     EleProp.innerHTML = "&nbsp;&nbsp;&#9733;";
  257.     EleProp.title = "查看属性.";
  258.     EleProp.onclick = fDisplayPopup;
  259.     Ele.appendChild(EleProp);
  260.    
  261.   } // end function fIntiFunc
  262.   
  263.   function fDisplayPopup()
  264.   {
  265.    var Parent = this.parentNode;
  266.    if(Parent==null)return;
  267.    
  268.    if(Parent["Object"]=="undefined")return;
  269.    
  270.    var StartTime = new Date();
  271.    defaultStatus = "开始显示节点信息...";
  272.    
  273.    pPopup.style.display = "block";
  274.    pPopup.innerHTML = "";
  275.    
  276.    var iLeft, iTop;
  277.    iLeft = fFindPos(this, false)+"px";
  278.    iTop = fFindPos(this, true)+this.offsetHeight+"px";
  279.    
  280.    with(pPopup.style)
  281.    {
  282.     left = iLeft;
  283.     top = iTop;
  284.    }
  285.    
  286.    var Obj = Parent["Object"];
  287.    
  288.    var arCount = fCountNode(Obj);
  289.    
  290.    var CountEle = document.createElement("div");
  291.    CountEle.innerHTML = 
  292.     "<div style='font-size:24px; color:red; text-align:center;'>"
  293.     +Tl.au.Subject+" "+Tl.au.Version+"</div>"
  294.     +"子节点数: "+Obj.childNodes.length
  295.     +"<br/>所有子节点数: "+arCount[1]
  296.     +"<br/>HTML 子节点数: "+fGetHtmlElementLen(Obj)
  297.     +"<br/>所有 HTML 子节点数: "+arCount[0]
  298.     ;
  299.     
  300.    if(Obj.href!=null)
  301.    {
  302.     CountEle.innerHTML+=
  303.     "<br/>Href: "+Obj.href
  304.     ;
  305.    }
  306.     
  307.    if(Obj.src!=null)
  308.    {
  309.     CountEle.innerHTML+=
  310.     "<br/>Src: "+Obj.src
  311.     ;
  312.    }
  313.    
  314.    pPopup.appendChild(CountEle);
  315.    
  316.    var EleBtn = document.createElement("button");
  317.     EleBtn.innerHTML = "枚举节点";
  318.     EleBtn.onclick=
  319.      function()
  320.      {
  321.       fListMethod(Obj);
  322.       return false;
  323.      }
  324.    pPopup.appendChild(EleBtn);
  325.    
  326.    var TextNode = document.createTextNode("  ");
  327.    pPopup.appendChild(TextNode);
  328.    
  329.    var EleBtn = document.createElement("button");
  330.     EleBtn.innerHTML = "关闭";
  331.     EleBtn.onclick=
  332.      function()
  333.      {
  334.       pPopup.style.display = "none";
  335.       try{w.close()}catch(e){}
  336.       return false;
  337.      }
  338.    pPopup.appendChild(EleBtn);
  339.    
  340.    var TempDiv = document.createElement("div");
  341.     TempDiv.innerHTML = "innerText: ";
  342.    
  343.    var EleTxa = document.createElement("textarea");
  344.     EleTxa.value = Obj.innerText||Obj.textContent;
  345.     EleTxa.style.width = "480px";
  346.     EleTxa.rows = 8;
  347.     
  348.    pPopup.appendChild(TempDiv);
  349.    pPopup.appendChild(EleTxa);
  350.    
  351.    var TempDiv = document.createElement("div");
  352.     TempDiv.innerHTML = "innerHTML: ";
  353.    
  354.    var EleTxa = document.createElement("textarea");
  355.     EleTxa.value = Obj.innerHTML;
  356.     EleTxa.style.width = "480px";
  357.     EleTxa.rows = 8;
  358.     
  359.    pPopup.appendChild(TempDiv);
  360.    pPopup.appendChild(EleTxa);

  361.    var EndTime = new Date();
  362.    
  363.    defaultStatus = "显示节点信息完毕, 耗时: "+(EndTime-StartTime)+" 毫秒";
  364.   }
  365.   
  366.   function fCountNode(obj)
  367.   {// shawl.qiu script
  368.    var iTag = 0;
  369.    var iNode = obj.childNodes.length;
  370.    if(obj.nodeType==1)iTag++;
  371.    
  372.    for(var i=0; i<obj.childNodes.length; i++)
  373.    {
  374.     var ar = arguments.callee(obj.childNodes[i]);
  375.     iTag+= ar[0];
  376.     iNode+= ar[1];
  377.    }
  378.   
  379.    return [iTag, iNode];
  380.   } // end function fCountNode
  381.   
  382.   function fExtendAll()
  383.   {
  384.    pPopup.style.display = "none";
  385.    var Parent = this.parentNode;
  386.     
  387.    var sClassName = "";
  388.    
  389.    var sSymIdr = "";
  390.    var sSymRpl = "";
  391.    var bExtend = null;
  392.    
  393.    if(!Parent["ExtendAll"])
  394.    {
  395.     sClassName = Tl.ClassName.Extend;
  396.     Parent.className = sClassName;
  397.     Parent["ExtendAll"] = true;
  398.     
  399.     sSymIdr = Tl.Extend.Symbol.False;
  400.     sSymRpl = Tl.Extend.Symbol.True;
  401.     
  402.     bExtend = true;
  403.     
  404.     defaultStatus = "正在展开节点, 请稍候...";
  405.    }
  406.    else
  407.    {
  408.     sClassName = Tl.ClassName.UnExtend;
  409.     Parent.className = sClassName;
  410.     Parent["ExtendAll"] = false;
  411.     
  412.     sSymIdr = Tl.Extend.Symbol.True;
  413.     sSymRpl = Tl.Extend.Symbol.False;
  414.     
  415.     bExtend = false;
  416.     
  417.     defaultStatus = "正在关闭节点, 请稍候...";
  418.    }
  419.    
  420.    var StartTime = new Date();
  421.   
  422.    ( // begin anonymous function
  423.     function()
  424.     {
  425.      var DivSet = Parent.getElementsByTagName("div");
  426.      var iDivSetLen = DivSet.length;
  427.      var iDivSetCount = 0;
  428.        
  429.      while(iDivSetCount<iDivSetLen)
  430.      {
  431.       var CurEle = DivSet[iDivSetCount];   
  432.        CurEle.className = sClassName;
  433.        CurEle["ExtendAll"] = bExtend;
  434.        
  435.        iDivSetCount++;
  436.      } // end while
  437.     }() 
  438.    ); // end anonymous function
  439.    
  440.    ( // begin anonymous function
  441.     function()
  442.     {
  443.      var ASet = Parent.getElementsByTagName("a");
  444.      var iASetLen = ASet.length;
  445.      var iASetCount = 0;
  446.        
  447.      while(iASetCount<iASetLen)
  448.      {
  449.       var CurEle = ASet[iASetCount];   
  450.        CurEle.innerHTML = CurEle.innerHTML.replace(sSymIdr, sSymRpl);
  451.        CurEle["Extend"] = bExtend;
  452.        iASetCount++;
  453.      } // end while
  454.     }() 
  455.    ); // end anonymous function
  456.    
  457.    var EndTime = new Date();
  458.    
  459.    var TimeSpan = (EndTime - StartTime)+" 毫秒.";
  460.    
  461.    if(bExtend)
  462.    {
  463.     defaultStatus = "节点已展开完毕, 耗时: "+TimeSpan;
  464.    }
  465.    else
  466.    {
  467.     defaultStatus = "节点已关闭完毕, 耗时: "+TimeSpan;
  468.    }
  469.   } // end function fExtendAll
  470.   
  471.   function fClick()
  472.   { 
  473.    pPopup.style.display = "none";
  474.    var Parent = this.parentNode;
  475.    if(!this.Extend)
  476.    { 
  477.     this.Extend = true;
  478.     Parent.className = Tl.ClassName.Extend;
  479.     this.innerHTML = this.innerHTML.replace(Tl.Extend.Symbol.False, Tl.Extend.Symbol.True);
  480.    }
  481.    else 
  482.    {
  483.     this.Extend = false;
  484.     Parent.className = Tl.ClassName.UnExtend;
  485.     this.innerHTML = this.innerHTML.replace(Tl.Extend.Symbol.True, Tl.Extend.Symbol.False);
  486.    }
  487.   } // function fClick
  488.   
  489.   function fGetHtmlElementLen(Ele)
  490.   {
  491.    var iLen = Ele.childNodes.length;
  492.    var iCount = 0;
  493.    var ChildCount = 0;
  494.    while(iCount<iLen)
  495.    {
  496.     if(Ele.childNodes[iCount].nodeType==1) ChildCount++;;
  497.     iCount++;
  498.    }
  499.    return ChildCount;
  500.   } // end function fCheckHasHtmlElement
  501.   
  502.   function fCheckHasHtmlElement(Ele)
  503.   {
  504.    var Had = false;
  505.    var iLen = Ele.childNodes.length;
  506.    var iCount = 0;
  507.    while(iCount<iLen)
  508.    {
  509.     if(Ele.childNodes[iCount].nodeType==1) return true;
  510.     iCount++;
  511.    }
  512.    return Had;
  513.   } // end function fCheckHasHtmlElement
  514.   
  515.   function fRepeatStr(sIpt, iLen)
  516.   {// shawl.qiu script
  517.    if(!sIpt)return;
  518.    if(!iLen) iLen = 2;
  519.    iLen -= 0;
  520.    return new Array(iLen+1).join(sIpt);
  521.   } // end function fRepeatStr
  522.   
  523.   function fFindPos(oEle, bReturnY)
  524.   { // shawl.qiu script
  525.    if(!oEle)
  526.    {
  527.     alert("对象不能为空!");
  528.     return;
  529.    }
  530.    
  531.    if(bReturnY)
  532.    {
  533.     return fFindPosY(oEle);
  534.    }
  535.    else
  536.    {
  537.     return fFindPosX(oEle);
  538.    }
  539.    
  540.    function fFindPosX(oEle)
  541.    { // shawl.qiu script
  542.     var iLeft = 0;
  543.     if(oEle.offsetParent)
  544.     {
  545.      while(true)
  546.      {
  547.       iLeft += oEle.offsetLeft;
  548.       if(!oEle.offsetParent)
  549.       {
  550.         break;
  551.       } // end if 1
  552.       oEle = oEle.offsetParent;
  553.      } // end while
  554.     }
  555.     else if(oEle.x)
  556.     {
  557.       iLeft += oEle.x;
  558.     }
  559.     return iLeft;
  560.    } // end function fFindPosX
  561.    
  562.    function fFindPosY(oEle)
  563.    { // shawl.qiu script
  564.     var iTop = 0;
  565.     if(oEle.offsetParent)
  566.     {
  567.      while(true)
  568.      {
  569.       iTop += oEle.offsetTop;
  570.       if(!oEle.offsetParent)
  571.       {
  572.         break;
  573.       } // end if 1
  574.       oEle = oEle.offsetParent;
  575.      } // end while
  576.     }
  577.     else if(oEle.y)
  578.     {
  579.       iTop += oEle.y;
  580.     }
  581.     return iTop;
  582.    } // end function fFindPosX
  583.   } // end function fFindPos
  584.   
  585.   function fListMtd(obj, e)
  586.   {// shawl.qiu script
  587.    if(!e)var e=window.event;
  588.    try{var sur=e.srcElement||e.target;}catch(e){}
  589.    try{w.close();}catch(e){}
  590.     w=open('','newwin','width=500,height=500,left=300,top=100,scrollbars');
  591.     w.document.write('<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />');
  592.     w.document.write('<style>body{width:400px;word-w.document.writeap: break-word;}</style>');
  593.     w.focus();
  594.     w.document.ondblclick=function(){w.close();}
  595.     fListMtd(obj, w);
  596.     try{w.onload=function(){ w.document.title=sur.firstChild.data;};}catch(e){}
  597.     w.document.close();
  598.     w.focus();
  599.    return true;
  600.    function fListMtd(obj, target)
  601.    {
  602.     var ar=new Array();
  603.     var j=0;
  604.     
  605.     for(var i in obj)
  606.     {
  607.      try
  608.      {
  609.       ar[j]=i.bold()+' '+(typeof obj[i]).fontcolor('red')+
  610.       ' '+(obj[i]+'').fontcolor('blue');
  611.       j++;
  612.      }
  613.      catch(e)
  614.      {
  615.       ar[j]=i.bold()+' '+(typeof obj[i]).fontcolor('red')+
  616.       (' empty').fontcolor('red').bold()
  617.       j++;
  618.      }
  619.     }
  620.     ar=ar.sort();
  621.     for(var i=0; i<ar.length; i++){
  622.      target.document.write(i+1,'. ',ar[i],'<br/>');
  623.     }
  624.     return true;
  625.    }
  626.   } // end function fListMtd
  627.   
  628.   function fListMethod(obj, e)
  629.   {
  630.    fListMtd(obj, e);
  631.   } // end function fListMethod
  632.   
  633.   function fFixMemoryLeak(oEle)
  634.   {// shawl.qiu script
  635.    if(!oEle)oEle=document.body;
  636.    
  637.    var AtrSet=oEle.attributes;
  638.    if(AtrSet)
  639.    {
  640.     var AtrLen = AtrSet.length;
  641.     var iAtrLen = 0;
  642.     
  643.     while(iAtrLen++<AtrLen)
  644.     {
  645.      if(typeof oEle[AtrSet[iAtrLen-1].name]=='function')
  646.      {
  647.       oEle[AtrSet[iAtrLen-1].name]=null;
  648.      }
  649.     } // end while(iAtrLen++<AtrLen)
  650.    } // end if(AtrSet)
  651.    
  652.    if(oEle.childNodes)
  653.    {
  654.     var ChildLen = oEle.childNodes.length;
  655.     var iChildLen = 0;
  656.     
  657.     while(iChildLen++<ChildLen)
  658.     {
  659.      arguments.callee(oEle.childNodes[iChildLen-1]);
  660.     } // end while(iChildLen++<ChildLen)
  661.      
  662.    } // end if(oEle.childNodes)
  663.         
  664.   } // end function fFixMemoryLeak

  665.   function fAppendCss()
  666.   {
  667.    var sStyleId = Tl.Body.id + "DomTreeStyle";
  668.    var sStyle = 
  669.    ""
  670.    +"#"+Tl.Container.id+" * div.ExtendTree"
  671.    +"{"
  672.    +" display:block;"
  673.    +"}"
  674.    +""
  675.    +"#"+Tl.Container.id+" div.UnExtendTree div, #"+Tl.Container.id+" * div.UnExtendTree div"
  676.    +"{"
  677.    +" display:none;"
  678.    +"}"
  679.    +""
  680.    +"#"+Tl.Container.id+" div.ExtendTree div, #"+Tl.Container.id+" * div.ExtendTree div"
  681.    +"{"
  682.    +""
  683.    +"}"
  684.    +""
  685.    +"#"+Tl.Container.id+" div#"+Tl.Container.id+"Popup"
  686.    +"{"
  687.    +" width: 500px;"
  688.    +" height:500px;"
  689.    +" background-color:white;"
  690.    +" border:1px dotted black;"
  691.    +" position:absolute;"
  692.    +" padding:5px;"
  693.    +"} "
  694.    ;
  695.    fAddStyleFromStr(sStyle, sStyleId);
  696.   } // end function fAppendCss
  697.   
  698.   function fAddStyleFromStr(sIpt, sId)
  699.   {// shawl.qiu script 
  700.    var EleStyle = document.createElement("style");
  701.    EleStyle.type = "text/css";
  702.    if(sId&&sId!="")
  703.    {
  704.     EleStyle.id = sId;
  705.    }
  706.    if(fCkBrs()==1)
  707.    {
  708.     EleStyle.styleSheet.cssText = sIpt;
  709.    }
  710.    else
  711.    {
  712.     EleStyle.innerHTML = sIpt;
  713.    }
  714.    function fCkBrs()
  715.    {
  716.     switch (navigator.appName)
  717.     {
  718.      case 'Opera': return 2;
  719.      case 'Netscape': return 3;
  720.      defaultreturn 1;
  721.     }
  722.    } // end function fCkBrs 
  723.    var EleHead=document.getElementsByTagName("head")[0]
  724.    if(!EleHead) EleHead=document.body;
  725.    EleHead.insertBefore(EleStyle, EleHead.firstChild)
  726.   } // end function fAddStyleFromStr
  727.   //------------------------------------end private method
  728.  } // shawl.qiu code
  729.  //---------------------------------end class DomTree()---------------------------------//
  730.  
  731.  var domtree = new DomTree();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值