以下是我從網上下的一段代碼,主要是控制跨frame進行開窗的功能.
但是這段js代碼看得不太懂,大家幫我看看,如能每句都翻譯出來的100分奉上!if(null==window.random) //這是定義什麼內容,一個隨相的窗口嗎?
{
if(null==window.fe005e9f_e51b_4307_88ff_b4b150368fd4)
{
window.fe005e9f_e51b_4307_88ff_b4b150368fd4=0;
}
window.random=function() //這個函數是定義窗品的什麼屬性
{
var s="RID"; 
var d=new Date();
s+=d.getYear();
s+=d.getMonth();
s+=d.getDate();
s+=d.getHours();
s+=d.getMinutes();
s+=d.getSeconds();
s+=d.getMilliseconds();
s+=parseInt(Math.random()*1000000000000);
s+=(window.fe005e9f_e51b_4307_88ff_b4b150368fd4++);
return s;  
}
}
if(null==window.$)
{
window.$=function() 
{
  var elements = new Array();
  for (var i = 0; i < arguments.length; i++) 
  {
    var element = arguments[i];
    if (typeof element == 'string')
      element = document.getElementById(element);
    if (arguments.length == 1)
      return element;
    elements.push(element);
  }
  return elements;
}
}
if(null==window.controlOffsetLeft)
{
window.controlOffsetLeft=function(itemName) 
{
var item=$(itemName);
var totalOffset = 0;
do 
{
try
{
totalOffset += item.offsetLeft;
item = item.offsetParent;
}
catch(ee)
{
}

while (item != null);
return totalOffset;
}
}
if(null==window.controlOffsetTop)
{
window.controlOffsetTop=function(itemName) 
{
var item=$(itemName);
var totalOffset = 0;
do 
{
try
{
totalOffset += item.offsetTop;
item = item.offsetParent;
}
catch(ee)
{
}
} while (item != null);
return totalOffset;
}
}
if(null==window.FrameMenuConfig)
{
window.FrameMenuConfig=function(title,url,target,img,id,pid)
{
this.Items=new Array();
this.title=title;
this.url=url;
this.img=img;
this.target=target;
this.parentId=pid;
this.id=id==null?random():id;
}
window.FrameMenu=new FrameMenuConfig();//create a new instance
FrameMenuConfig.ID2Item={};
FrameMenuConfig.WindowsList=new Array();
FrameMenuConfig.TopWindow=window.createPopup();
FrameMenuConfig.CssPrefix="";
FrameMenuConfig.CssText=null;
FrameMenuConfig.WindowsWidth=150;
FrameMenuConfig.ItemHeight=20;
FrameMenuConfig.FolderImage=null;
FrameMenuConfig.DefaultTarget=null;
window.FrameMenuConfig.prototype.add=function(title,url,target,img)
{
if(null==title||title.length<1)
{
return null;
}
var item=new FrameMenuConfig(title,url,target,img);
item.parentId=this.id;
this.Items.push(item);
FrameMenuConfig.ID2Item[item.id]=item;
return item;
}
window.FrameMenuConfig.prototype.add2=function(title,url,target,img)
{
if(null==title||title.length<1)
{
return null;
}
var item=new FrameMenuConfig(title,url,target,img);
item.parentId=this.id;
this.Items.push(item);
FrameMenuConfig.ID2Item[item.id]=item;
return this;
}
window.FrameMenuConfig.prototype.insert=function(pid,id,title,url,img,target)
{
if(null==title||title.length<1)
{
return null;
}
var item=new FrameMenuConfig(title,url,img,target,id,pid);
FrameMenuConfig.ID2Item[item.id]=item;
if(null==pid)
{
this.Items.push(item);
}
else
{
var pitem=FrameMenuConfig.ID2Item[pid];
if(null==pitem)
{
alert("輻痋粕等褐掛渣昫ㄛ拸楊梑善ID="+pid+"腔攷倛誹萸");
return;
}
pitem.Items.push(item);
}
return item;
}
FrameMenuConfig.showMenu=function(control,pid,deep)
{
if(null==FrameMenuConfig.CssText)
{
FrameMenuConfig.initlize();
}
var ele=control==null?event.srcElement:$(control);
if(null==ele)
{
return;
}
deep=Math.max(1,null==deep?1:deep);
var width = FrameMenuConfig.WindowsWidth;    
var left = controlOffsetLeft(ele);  
    var top =  controlOffsetTop(ele);
    var items=FrameMenuConfig.getSubItems(pid);
    var height=items.length*FrameMenuConfig.ItemHeight;
    var popw=null;
    if(deep<=1)
{
var scrolltop=window.document.body.scrollTop || window.document.documentElement.scrollTop;
var scrollleft=window.document.body.scrollLeft || window.document.documentElement.scrollLeft;
if((ele==document||ele==document.body )&&event!=null)
{
left=event.x;
top=event.y;
}
else
{
top+=(ele.clientHeight|ele.innerHeight|20)+3-scrolltop;
left+=-scrollleft;
}
popw=FrameMenuConfig.TopWindow;
}
else
{
popw=ele.document.parentWindow.window.b4b150368fd4_popwindow;
if(null==popw)
{
popw=ele.document.parentWindow.window.createPopup();
ele.document.parentWindow.window.b4b150368fd4_popwindow=popw;
}
left+=width-1;
}
FrameMenuConfig.WindowsList[deep]=popw;
for(var n=deep;n<FrameMenuConfig.WindowsList.length;n++)
{
if(null!=FrameMenuConfig.WindowsList[n] && null!=FrameMenuConfig.WindowsList[n].hide)
{
FrameMenuConfig.WindowsList[n].hide();
}
}
var parentTreeNode="parent";
    for(var i=0;i<(deep-1);i++)
    {
     parentTreeNode+=".parent";
    }
    var cssprefix=FrameMenuConfig.CssPrefix;
    cssprefix=null==cssprefix?"":cssprefix;
    if(cssprefix.indexOf("#")==0)
    {
     cssprefix="id='"+cssprefix.substring(1)+"'";
    }
    else
    {
     if(cssprefix.length>0)
     {
     cssprefix="class='"+cssprefix+"'";
     }
    }
    popw.document.body.innerHTML="";
    popw.document.write("<body leftmargin=0 topmargin=0 scroll=no style='border:solid menu 0px;' >");
    if(null!=FrameMenuConfig.CssText && FrameMenuConfig.CssText.length>0)
    {
     popw.document.write("<style>"+FrameMenuConfig.CssText+"</style>");
}
    var strFolder="";
    var strText="";
    for(var n=0;null!=items && n<items.length;n++)
{
var item=items[n];
var bFolder=FrameMenuConfig.getSubItems(item.id).length>0;
var url=parentTreeNode+".FrameMenuConfig.goto('"+(null==item.url?"":item.url)+"','"+(null==item.target?"":item.target)+"')";
var htxt="<div "+
(null!=FrameMenuConfig.CssText && FrameMenuConfig.CssText.length>0?"":
" style='background-color:#E8E8E8;width:"+width+"px;height:"+FrameMenuConfig.ItemHeight+"px;'")+
" "+cssprefix+
" onmouseover=\""+parentTreeNode+".FrameMenuConfig.showMenu(this,'"+item.id+"',"+(deep+1)+")\""+
">"+
(bFolder && null!=FrameMenuConfig.FolderImage && FrameMenuConfig.FolderImage.length>0?
"<img src='"+FrameMenuConfig.FolderImage+"' style='width:16px;height:16px;border:0;float:right' />"
:"")+
"<a href='javascript:void(0)' onclick=\""+url+"\">"+item.title+"</a>"+
"</div>";
if(bFolder){strFolder+=htxt;}else{strText+=htxt;}
}
if(items.length>0)
{
popw.document.write(strFolder+strText);
popw.show(left,top, width, height, document.body);
}
}
FrameMenuConfig.hideAllWindows=function()
{
for(var n=0;null!=FrameMenuConfig.WindowsList && n<FrameMenuConfig.WindowsList.length;n++)
{
if(null!=FrameMenuConfig.WindowsList[n] && null!=FrameMenuConfig.WindowsList[n].hide)
{
FrameMenuConfig.WindowsList[n].hide();
}
}
}
FrameMenuConfig.createFrameMenu=function(control,bremove)
{
var ele=$(control);
if(bremove)
{
ele.innerHTML="";
}
var items=FrameMenuConfig.getSubItems();
for(var n=0;n<items.length;n++)
{
var item=items[n];
var bFolder=FrameMenuConfig.getSubItems(item.id).length>0;
var url="javascript:{FrameMenuConfig.goto('"+(null==item.url?"":item.url)+"','"+(null==item.target?"":item.target)+"');}";
var ah=document.createElement("<a href=\""+url+"\" onmouseover=\"FrameMenuConfig.showMenu(this,'"+item.id+"',1)\">");
ah.innerHTML=item.title;
ele.appendChild(ah);
}
}
FrameMenuConfig.getSubItems=function(pid)
{
if(null==pid)
{
return window.FrameMenu.Items;
}
else
{
var item=FrameMenuConfig.ID2Item[pid];
if(null==item)
{
return new Array();
}
else
{
return item.Items;
}
}
}
FrameMenuConfig.goto=function(url,target)
{
FrameMenuConfig.hideAllWindows();
if(null==url||url.length<1)
{
return;
}
if(null==target||target.length<1)
{
target=FrameMenuConfig.DefaultTarget;
}
if(null!=target && target.length>0&& target.toLowerCase()!="_self"&& target.toLowerCase()!="self")
{
if(target.toLowerCase()=="_blank")
{
window.open(url);
}
else
{
if(window.parent==null||null==window.parent.frames[target])
{
alert("輻痋粕等饜离粕等渣昫ㄛ梑祥善痋 "+target);
return;
}
else
{
window.parent.frames[target].location=url;
}
}
}
else
{
window.location=url;
}
}
//init styleSheet from this page
FrameMenuConfig.initlize=function()
{
FrameMenuConfig.ItemHeight=Math.max(12,FrameMenuConfig.ItemHeight);
FrameMenuConfig.WindowsWidth=Math.max(80,FrameMenuConfig.WindowsWidth);
document.focus();
document.onfocusout=function()
{
FrameMenuConfig.hideAllWindows();
}
FrameMenuConfig.CssText="";
for(var n=0;FrameMenuConfig.CssPrefix!=null && FrameMenuConfig.CssPrefix.length>0 && n<document.styleSheets.length;n++)
{
var sts=document.styleSheets[n];
for(var x=0;x<sts.rules.length;x++)
{
var rr=sts.rules[x];
if(rr.selectorText.indexOf(FrameMenuConfig.CssPrefix)>=0)
{
FrameMenuConfig.CssText+=rr.selectorText+"{"+rr.style.cssText+"}";
}
}
}
}
}</script>

解决方案 »

  1.   

    以下為我自行翻譯的一點內容,希望高人補充啊if(null==window.random) //首行定義一個隨機的窗口
    {
    if(null==window.fe005e9f_e51b_4307_88ff_b4b150368fd4)
    {
    window.fe005e9f_e51b_4307_88ff_b4b150368fd4=0;
    }
    window.random=function() //這個函數是用來做什麼的,返回窗口的屬性嗎?要那麼多時間和'RID'干什麼?
    {
    var s="RID"; 
    var d=new Date();
    s+=d.getYear();
    s+=d.getMonth();
    s+=d.getDate();
    s+=d.getHours();
    s+=d.getMinutes();
    s+=d.getSeconds();
    s+=d.getMilliseconds();
    s+=parseInt(Math.random()*1000000000000);
    s+=(window.fe005e9f_e51b_4307_88ff_b4b150368fd4++);
    return s;  
    }
    }if(null==window.$)
    {
     
    window.$=function() 
    {
      var elements = new Array();
      
      for (var i = 0;i < arguments.length;i++) //js中的arguments主要是可以對輸入的參數進行跟蹤 得出路徑的索引
      {
        var element = arguments[i]; //行出當前行索引的url
        if (typeof element == 'string') //判斷element 數據類型
          element = document.getElementById(element); //獲取element的id值
      
        if (arguments.length == 1) //如果此對象只有一個url
          return element;
        elements.push(element);  //如果有多個URL則賦給elements 但是這個方法看不太明白 elements.push 誰可以解釋下?
     
      }
     
      return elements;
    }
    }
    if(null==window.controlOffsetLeft) //控制左邊距的,
    {
    window.controlOffsetLeft=function(itemName) 
    {
    var item=$(itemName); 
    var totalOffset = 0;
    do 
    {
    try
    {
    totalOffset += item.offsetLeft;
    item = item.offsetParent;
    }
    catch(ee)
    {
    }

    while (item != null);
    return totalOffset;
    }
    }
    if(null==window.controlOffsetTop) //控制右邊距的,
    {
    window.controlOffsetTop=function(itemName) 
    {
    var item=$(itemName);
    var totalOffset = 0;
    do 
    {
    try
    {
    totalOffset += item.offsetTop;
    item = item.offsetParent;
    }
    catch(ee)
    {
    }
    } while (item != null);
    return totalOffset;
    }
    }
    if(null==window.FrameMenuConfig) //產生每個菜單對象
    {
    window.FrameMenuConfig=function(title,url,target,img,id,pid)
    { this.Items=new Array();
    this.title=title;  /給菜單賦屬性值,這是從畫面菜單中傳弟過來的
    this.url=url;
    this.img=img;
    this.target= target;
    this.parentId=pid;
    this.id=id==null?random():id;
    }
    window.FrameMenu=new FrameMenuConfig();//創建一個窗口,實例? 因該這就是可以跨frame的核心地方吧?
    FrameMenuConfig.ID2Item={};
    FrameMenuConfig.WindowsList=new Array();
    FrameMenuConfig.TopWindow=window.createPopup();
    FrameMenuConfig.CssPrefix="";
    FrameMenuConfig.CssText=null;
    FrameMenuConfig.WindowsWidth=150;
    FrameMenuConfig.ItemHeight=20;
    FrameMenuConfig.FolderImage=null;
    FrameMenuConfig.DefaultTarget=null;
    window.FrameMenuConfig.prototype.add=function(title,url,target,img)//產生下級菜單的方式,
    {
    if(null==title||title.length<1)
    {
    return null;
    }
    var item=new FrameMenuConfig(title,url,target,img);
    item.parentId=this.id;
    this.Items.push(item);
    FrameMenuConfig.ID2Item[item.id]=item;
    return item;
    }
    window.FrameMenuConfig.prototype.add2=function(title,url,target,img)//產生並列的菜單
    {

    if(null==title||title.length<1)
    {
    return null;
    }
    var item=new FrameMenuConfig(title,url,target,img);
    item.parentId=this.id;
    this.Items.push(item);
    FrameMenuConfig.ID2Item[item.id]=item;
    return this;
    }
    window.FrameMenuConfig.prototype.insert=function(pid,id,title,url,img,target)//insert一個菜單的值
    {
    if(null==title||title.length<1)
    {
    return null;
    }
    var item=new FrameMenuConfig(title,url,img,target,id,pid);
    FrameMenuConfig.ID2Item[item.id]=item;
    if(null==pid)  //如果pid為null則代表增加的為根目錄
    {
    this.Items.push(item);
    }
    else 
    {
    var pitem=FrameMenuConfig.ID2Item[pid];
    if(null==pitem)
    {
    alert("ID="+pid+"");
    return;
    }
    pitem.Items.push(item);
    } return item;
    }
    FrameMenuConfig.showMenu=function(control,pid,deep) //顯示菜單
    {
    if(null==FrameMenuConfig.CssText)
    {
    FrameMenuConfig.initlize();
    }
    var ele=control==null?event.srcElement:$(control);
    if(null==ele)
    {
    return;
    }
    deep=Math.max(1,null==deep?1:deep);
    var width = FrameMenuConfig.WindowsWidth;    
    var left = controlOffsetLeft(ele);  
        var top =  controlOffsetTop(ele);
        var items=FrameMenuConfig.getSubItems(pid);
        var height=items.length*FrameMenuConfig.ItemHeight;
        var popw=null;
        if(deep<=1)
    {
    var scrolltop=window.document.body.scrollTop || window.document.documentElement.scrollTop;
    var scrollleft=window.document.body.scrollLeft || window.document.documentElement.scrollLeft;
    if((ele==document||ele==document.body )&&event!=null)
    {
    left=event.x;
    top=event.y;
    }
    else
    {
    top+=(ele.clientHeight|ele.innerHeight|20)+3-scrolltop;
    left+=-scrollleft;
    }
    popw=FrameMenuConfig.TopWindow;
    }
    else
    {
    popw=ele.document.parentWindow.window.b4b150368fd4_popwindow;
    if(null==popw)
    {
    popw=ele.document.parentWindow.window.createPopup();
    ele.document.parentWindow.window.b4b150368fd4_popwindow=popw;
    }
    left+=width-1;
    }
    FrameMenuConfig.WindowsList[deep]=popw;
    for(var n=deep;n<FrameMenuConfig.WindowsList.length;n++)
    {
    if(null!=FrameMenuConfig.WindowsList[n] && null!=FrameMenuConfig.WindowsList[n].hide)
    {
    FrameMenuConfig.WindowsList[n].hide();
    }
    }
    var parentTreeNode="parent";
        for(var i=0;i<(deep-1);i++)
        {
         parentTreeNode+=".parent";
        }
        var cssprefix=FrameMenuConfig.CssPrefix;
        cssprefix=null==cssprefix?"":cssprefix;
        if(cssprefix.indexOf("#")==0)
        {
         cssprefix="id='"+cssprefix.substring(1)+"'";
        }
        else
        {
         if(cssprefix.length>0)
         {
         cssprefix="class='"+cssprefix+"'";
         }
        }     popw.document.body.innerHTML=""; //以下為寫入html代碼
        popw.document.write("<body leftmargin=0 topmargin=0 scroll=no style='border:solid menu 0px;' >");
        if(null!=FrameMenuConfig.CssText && FrameMenuConfig.CssText.length>0)
        {
         popw.document.write("<style>"+FrameMenuConfig.CssText+"</style>");
    }
        var strFolder="";
        var strText="";
        for(var n=0;null!=items && n<items.length;n++)
    {
    var item=items[n];
    var bFolder=FrameMenuConfig.getSubItems(item.id).length>0;
    var url=parentTreeNode+".FrameMenuConfig.goto('"+(null==item.url?"":item.url)+"','"+(null==item.target?"":item.target)+"')";
    if (item.target == null){
    url= "OpenWindow('"+(null==item.url?"":item.url)+"')";
    }
    var htxt="<div "+
    (null!=FrameMenuConfig.CssText && FrameMenuConfig.CssText.length>0?"":
    " style='z-index:2;background-color:#E8E8E8;width:"+width+"px;height:"+FrameMenuConfig.ItemHeight+"px;'")+
    " "+cssprefix+
    " onmouseover=\""+parentTreeNode+".FrameMenuConfig.showMenu(this,'"+item.id+"',"+(deep+1)+")\""+
    ">"+
    (bFolder && null!=FrameMenuConfig.FolderImage && FrameMenuConfig.FolderImage.length>0?
    "<img src='"+FrameMenuConfig.FolderImage+"' style='width:16px;height:16px;border:0;float:right' />"
    :"")+
    "<a href='javascript:void(0)' onclick=\""+url+"\">"+item.title+"</a>"+
    "</div>";
    if(bFolder){strFolder+=htxt;}else{strText+=htxt;}
    alert(htxt);
    }
    if(items.length>0) 
    {
    popw.document.write(strFolder+strText);
    popw.show(left,top, width, height, document.body);
    }
    }
    FrameMenuConfig.hideAllWindows=function()
    {
    for(var n=0;null!=FrameMenuConfig.WindowsList && n<FrameMenuConfig.WindowsList.length;n++)
    {
    if(null!=FrameMenuConfig.WindowsList[n] && null!=FrameMenuConfig.WindowsList[n].hide)
    {
    FrameMenuConfig.WindowsList[n].hide();
    }
    }
    }
    FrameMenuConfig.createFrameMenu=function(control,bremove)
    {
    var ele=$(control);
    if(bremove)
    {
    ele.innerHTML="";
    }
    var items=FrameMenuConfig.getSubItems();
    for(var n=0;n<items.length;n++)
    {
    var item=items[n];
    var bFolder=FrameMenuConfig.getSubItems(item.id).length>0;
    var url="javascript:{FrameMenuConfig.goto('"+(null==item.url?"":item.url)+"','"+(null==item.target?"":item.target)+"');}";
    var ah=document.createElement("<a href=\""+url+"\" onmouseover=\"FrameMenuConfig.showMenu(this,'"+item.id+"',1)\">");
    ah.innerHTML=item.title;
    ele.appendChild(ah);
    }
    }
    FrameMenuConfig.getSubItems=function(pid)
    {
    if(null==pid)
    {
    return window.FrameMenu.Items;
    }
    else
    {
    var item=FrameMenuConfig.ID2Item[pid];
    if(null==item)
    {
    return new Array();
    }
    else
    {
    return item.Items;
    }
    }
    }
    FrameMenuConfig.goto=function(url,target) //轉向地址
    {
    FrameMenuConfig.hideAllWindows();
    if(null==url||url.length<1)
    {
    return;
    }
    if(null==target||target.length<1)
    {
    target=FrameMenuConfig.DefaultTarget;
    }
    //toLowerCase //轉換為小寫形式
    if(null!=target && target.length>0 && target.toLowerCase()!="_self" && target.toLowerCase()!="self" )
    {
    if(target.toLowerCase()=="_blank")
    {
    window.open(url);
    }
    else
    {
    if(window.parent==null||null==window.parent.frames[target])
    {
    alert("不存在的地址"+target);
    return;
    }
    else
    {
    window.parent.frames[target].location=url;
    }
    }
    }
    else
    {
    window.location=url;
    }
    }
    //init styleSheet from this page
    FrameMenuConfig.initlize=function() //初始化對象
    {
    FrameMenuConfig.ItemHeight=Math.max(12,FrameMenuConfig.ItemHeight);
    FrameMenuConfig.WindowsWidth=Math.max(80,FrameMenuConfig.WindowsWidth);
    document.focus();
    document.onfocusout=function()
    {
    FrameMenuConfig.hideAllWindows();
    }
    FrameMenuConfig.CssText="";
    for(var n=0;FrameMenuConfig.CssPrefix!=null && FrameMenuConfig.CssPrefix.length>0 && n<document.styleSheets.length;n++)
    {
    var sts=document.styleSheets[n];
    for(var x=0;x<sts.rules.length;x++)
    {
    var rr=sts.rules[x];
    if(rr.selectorText.indexOf(FrameMenuConfig.CssPrefix)>=0)
    {
    FrameMenuConfig.CssText+=rr.selectorText+"{"+rr.style.cssText+"}";
    }
    }
    }
    }
    }
      

  2.   

    在測試這段代碼時,我發現無法添加OpenWindow到新開的popw窗口中,這該怎麼解決啊?
    我開的窗口是createPopup(); 用來實現菜單的頁面. 
    popw.document.body.innerHTML="";
    var str_sub = " <script language='javascript'> function OpenWindow(){ window.open('body.asp')  } </script>"
        popw.document.write(str_sub);
      

  3.   

    帮你抛砖引玉一下,先解释2段代码:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>无标题文档</title>
    </head><body>
    <div id="d1">d1</div>
    <div id="d2">d2</div>
    <div id="d3">d3</div>
    </body>
    </html>
    <script type="text/javascript">
    if(null==window.random) //这里的random仅仅是个变量,在window作用域下,大致等同于全局变量
    {
        if(null==window.fe005e9f_e51b_4307_88ff_b4b150368fd4)
        {
            window.fe005e9f_e51b_4307_88ff_b4b150368fd4=0; //初始化全局变量 fe005e9f_e51b_4307_88ff_b4b150368fd4 为 0 
        }
        window.random=function() //这个函数就是返回一个固定格式的随机字符串。下面有个alert调用了这个函数,你可以看看。
        {
            var s="RID";  //变量 s 当前为 "RID"
            var d=new Date(); //获取当前日期对象
            s+=d.getYear(); //s 加上 年
            s+=d.getMonth(); //s 加上 月
            s+=d.getDate(); //s 加上 日
            s+=d.getHours(); //s 加上 时
            s+=d.getMinutes(); //s 加上 分
            s+=d.getSeconds(); //s 加上 秒
            s+=d.getMilliseconds(); //s 加上 毫秒
            s+=parseInt(Math.random()*1000000000000); //s 加上 0 ~ 1000000000000 之间的一个随机数
            s+=(window.fe005e9f_e51b_4307_88ff_b4b150368fd4++); //最后再加上全局变量 window.fe005e9f_e51b_4307_88ff_b4b150368fd4 的值
            return s;   //返回 s 这个字符串
        }
    }alert(window.random()); //测试代码,运行可以看到输出的字符串if(null==window.$) //测试window.$是否存在,不存在才会继续后面对 $ 的定义。
    { //每次要测 一个名称 是否存在累不累啊。还不如把整个代码放到一个模块里,不用发愁作用域冲突了。 
         
        window.$=function() //这里定义函数 $ 。
        {
          var elements = new Array();
          
          for (var i = 0;i < arguments.length;i++) //arguments对象取得这个函数所能获得的所有参数列表
          {
            var element = arguments[i]; //循环获得每一个参数
            if (typeof element == 'string') //判斷element 數據類型
              element = document.getElementById(element); //这是吧id为 字符串element 的值 的元素对象赋值给了element。
               //document.getElementById() 通过ID获取文档的一个DOM元素
            if (arguments.length == 1) //如果数组长度为1 
              return element;   //直接返回对象
            elements.push(element);  //elements是个数组,push就是把一个元素加到数组末尾的函数。
         
          }
         
          return elements; //返回这个数组
        }
    }//这里演示如何调用上面的函数:
    var div_d1 = $("d1"); //获取了id为"d1"的DOM.
    alert(div_d1.innerHTML); //输出这个DIV的内部HTML。var arrDiv = $("d1","d2","d3"); //获取了3个DIV DOM组成的一个数组
    for(var i=0,j=arrDiv.length;i<j;i++){
    alert(arrDiv[i].innerHTML);
    }</script>
    楼主明显没有什么javascript语法功底,建议先多翻翻参考书。自己读完了,能大致了解上面代码的意思了,估计javascript就入门了。别人不给你翻是因为觉得你太懒了,一些基础的概念你都没去学就直接问问题。就像是一个从来不会编程的人问你一大长串代码每一句时什么意思,这真的是个非常浩大的工程。给你推荐本书:javascript权威指南。上面每一段代码的功能在这本书里面都能找到。
      

  4.   

    非常感謝樓上的,我也是剛從c/s語言轉到b/s過來,所以對js還沒入門.
    我一定會好好看書的
      

  5.   

    这种代码风格估计是00~03年左右的吧,old...
      

  6.   

    if(null==window.random) //如果没有window.random函数创建,自定义获取随机数的函数目的是控制控件ID不重复
    {
        if(null==window.fe005e9f_e51b_4307_88ff_b4b150368fd4)
        {
            window.fe005e9f_e51b_4307_88ff_b4b150368fd4=0;
        }
        window.random=function() //根据精确的时间再加上系统默认的随机函数返回值生成随机数
        {
            var s="RID"; 
            var d=new Date();
            s+=d.getYear();
            s+=d.getMonth();
            s+=d.getDate();
            s+=d.getHours();
            s+=d.getMinutes();
            s+=d.getSeconds();
            s+=d.getMilliseconds();
            s+=parseInt(Math.random()*1000000000000);
            s+=(window.fe005e9f_e51b_4307_88ff_b4b150368fd4++);
            return s;  
        }
    }
    /*
    上述函数函数=
    function random()
    {}
    加上window.相当于random()函数的作用域。
    *///定义函数$拓展代替document.getElementById();返回数组。
    if(null==window.$)
    {
        window.$=function() 
        {
          var elements = new Array();
          for (var i = 0; i < arguments.length; i++) 
          {
            var element = arguments[i];
            if (typeof element == 'string')
              element = document.getElementById(element);
            if (arguments.length == 1)
              return element;
            elements.push(element);
          }
          return elements;
        }
    }//定义函数controlOffsetLeft循环(加)找到一个控件相对于浏览器的左边距。(控件可能在容器中例如:TD,DIV等等)
    if(null==window.controlOffsetLeft)
    {
        window.controlOffsetLeft=function(itemName) 
        {
            var item=$(itemName);
            var totalOffset = 0;
            do 
            {
                try
                {
                    totalOffset += item.offsetLeft;
                    item = item.offsetParent;
                }
                catch(ee)
                {
                }
            } 
            while (item != null);
            return totalOffset;
        }
    }
    //定义函数controlOffsetLeft循环(加)找到一个控件相对于浏览器的上边距。(控件可能在容器中例如:TD,DIV等等)
    if(null==window.controlOffsetTop)
    {
        window.controlOffsetTop=function(itemName) 
        {
            var item=$(itemName);
            var totalOffset = 0;
            do 
            {
                try
                {
                    totalOffset += item.offsetTop;
                    item = item.offsetParent;
                }
                catch(ee)
                {
                }
            } while (item != null);
            return totalOffset;
        }
    }//定义类FrameMenuConfig
    if(null==window.FrameMenuConfig)
    {
    //菜单类的构造函数(属性:值、链接地址、响应框架名称、背景图片、ID、父ID)
        window.FrameMenuConfig=function(title,url,target,img,id,pid)
        {
            this.Items=new Array();//存储其子菜单
            this.title=title;
            this.url=url;
            this.img=img;
            this.target=target;
            this.parentId=pid;//父节点ID
            this.id=id==null?random():id;//本身ID     
        }
        window.FrameMenu=new FrameMenuConfig();//定义一个菜单类得实例,该实例作用域是window(相当于全局变量),该句可以提到外边,在这里有些混淆
        FrameMenuConfig.ID2Item={};//菜单类的静态属性【私有:只有类内部调用】
        FrameMenuConfig.WindowsList=new Array();//菜单类的静态属性【私有:只有类内部调用】
        FrameMenuConfig.TopWindow=window.createPopup();//采用window.createPopup()的形式弹出子菜单,缺陷背景不能透明,采用ifreame好些,背景能透明【私有:只有类内部调用】
        FrameMenuConfig.CssPrefix="";//该菜单的CSS类名【私有:只有类内部调用】系统菜单生成的结构为<div><a>...</a></div>,此处设置div的显示风格,a的显示风格请附带在div中设置
        FrameMenuConfig.CssText=null;//菜单类的静态属性【私有:只有类内部调用】
        FrameMenuConfig.WindowsWidth=150;//菜单类的静态属性(子菜单默认宽度)【私有:只有类内部调用】
        FrameMenuConfig.ItemHeight=20;//菜单类的静态属性(子菜单默认高度)【私有:只有类内部调用】
        FrameMenuConfig.FolderImage=null;//菜单类的静态属性(子菜单又含有子菜单出现的图片)【私有:只有类内部调用】
        FrameMenuConfig.DefaultTarget=null;//菜单类的静态属性(默认响应的框架名称)【私有:只有类内部调用】
        
        
    //add函数插入一个菜单,返回这个新的菜单的实例,格式为 节点显示文本、节点URL、节点的目标框架,目标框架支持_self和_blank.节点的ID自动生成
        //菜单类的实例对象的函数【公有:对象可以调用】(添加菜单项)
        window.FrameMenuConfig.prototype.add=function(title,url,target,img)
        {
            if(null==title||title.length<1)
            {
                return null;
            }
            var item=new FrameMenuConfig(title,url,target,img);
            item.parentId=this.id;
            this.Items.push(item);
            FrameMenuConfig.ID2Item[item.id]=item;
            return item;
        }
        //菜单类的实例对象的函数【公有:对象可以调用】(添加菜单项),函数插入一个菜单,返回这个菜单的父亲节点的实例,格式为 节点显示文本、节点URL、节点的目标框架,目标框架支持_self和_blank.节点的ID自动生成
        window.FrameMenuConfig.prototype.add2=function(title,url,target,img)
        {
            if(null==title||title.length<1)
            {
                return null;
            }
            var item=new FrameMenuConfig(title,url,target,img);
            item.parentId=this.id;
            this.Items.push(item);
            FrameMenuConfig.ID2Item[item.id]=item;
            return this;
        }
        
         //菜单类的实例对象的函数【公有:对象可以调用】(插入菜单项)直接插入一格记录,格式为父亲代码、节点代码、节点显示文本、节点URL、节点的目标框架,目标框架支持_self和_blank.
        window.FrameMenuConfig.prototype.insert=function(pid,id,title,url,img,target)
        {
            if(null==title||title.length<1)
            {
                return null;
            }
            var item=new FrameMenuConfig(title,url,img,target,id,pid);
            FrameMenuConfig.ID2Item[item.id]=item;
            if(null==pid)
            {
                this.Items.push(item);//添加到FrameMenu.Items里
            }
            else
            {
                var pitem=FrameMenuConfig.ID2Item[pid];
                if(null==pitem)
                {
                    alert("輻痋粕等褐掛渣昫ㄛ拸楊梑善ID="+pid+"腔攷倛誹萸");
                    return;
                }
                pitem.Items.push(item);
            }
            return item;
        }
        
        //菜单类静态【私有:只有类内部调用】函数(显示子级菜单)
        FrameMenuConfig.showMenu=function(control,pid,deep)
        {
            if(null==FrameMenuConfig.CssText)
            {
                FrameMenuConfig.initlize();
            }
            var ele=control==null?event.srcElement:$(control);
            if(null==ele)
            {
                return;
            }
            deep=Math.max(1,null==deep?1:deep);
            var width = FrameMenuConfig.WindowsWidth;    
            var left = controlOffsetLeft(ele);  
            var top =  controlOffsetTop(ele);
            var items=FrameMenuConfig.getSubItems(pid);
            var height=items.length*FrameMenuConfig.ItemHeight;    
            var popw=null;
            if(deep<=1)//针对一级菜单
            {
                var scrolltop=window.document.body.scrollTop || window.document.documentElement.scrollTop;//前面是针对ie的
                var scrollleft=window.document.body.scrollLeft || window.document.documentElement.scrollLeft;
                if((ele==document||ele==document.body )&&event!=null)//如果是在页面上直接点击
                {
                    left=event.x;
                    top=event.y;
                }
                else//如果是页面上的控件
                {
                    top+=(ele.clientHeight|ele.innerHeight|20)+3-scrolltop;
                    left+=-scrollleft;
                }
                popw=FrameMenuConfig.TopWindow;                    
            }
            else//针对子菜单
            {
                popw=ele.document.parentWindow.window.b4b150368fd4_popwindow;
                if(null==popw)
                {
                    popw=ele.document.parentWindow.window.createPopup();
                    ele.document.parentWindow.window.b4b150368fd4_popwindow=popw;
                }
                left+=width-1;
            }    
            FrameMenuConfig.WindowsList[deep]=popw;
            for(var n=deep;n<FrameMenuConfig.WindowsList.length;n++)
            {
                if(null!=FrameMenuConfig.WindowsList[n] && null!=FrameMenuConfig.WindowsList[n].hide)
                {
                    FrameMenuConfig.WindowsList[n].hide();//隐藏掉所有的同级及下级菜单
                }
            }
            var parentTreeNode="parent";
            for(var i=0;i<(deep-1);i++)
            {
                parentTreeNode+=".parent";
            }
            //给菜单添加样式
            var cssprefix=FrameMenuConfig.CssPrefix;
            cssprefix=null==cssprefix?"":cssprefix;
            if(cssprefix.indexOf("#")==0)
            {
                cssprefix="id='"+cssprefix.substring(1)+"'";
            }
            else
            {
                if(cssprefix.length>0)
                {
                    cssprefix="class='"+cssprefix+"'";
                }
            }
            //组织window.createPopup();的INNERHTML,window.createPopup();弹出一个没有标题栏的窗口,改窗口隶属于调用它的页面
            popw.document.body.innerHTML="";
            popw.document.write("<body leftmargin=0 topmargin=0 scroll=no style='border:solid menu 0px;' >");
            if(null!=FrameMenuConfig.CssText && FrameMenuConfig.CssText.length>0)
            {
                popw.document.write("<style>"+FrameMenuConfig.CssText+"</style>");
            }
            var strFolder="";
            var strText="";
            for(var n=0;null!=items && n<items.length;n++)
            {
                var item=items[n];
                var bFolder=FrameMenuConfig.getSubItems(item.id).length>0;
                var url=parentTreeNode+".FrameMenuConfig.goto('"+(null==item.url?"":item.url)+"','"+(null==item.target?"":item.target)+"')";
                var htxt="<div "+
                    (null!=FrameMenuConfig.CssText && FrameMenuConfig.CssText.length>0?"":
                        " style='background-color:#E8E8E8;width:"+width+"px;height:"+FrameMenuConfig.ItemHeight+"px;'")+
                    " "+cssprefix+
                    " onmouseover=\""+parentTreeNode+".FrameMenuConfig.showMenu(this,'"+item.id+"',"+(deep+1)+")\""+
                    ">"+
                    (bFolder && null!=FrameMenuConfig.FolderImage && FrameMenuConfig.FolderImage.length>0?
                        "<img src='"+FrameMenuConfig.FolderImage+"' style='width:16px;height:16px;border:0;float:right' />"
                        :"")+
                    "<a href='javascript:void(0)' onclick=\""+url+"\">"+item.title+"</a>"+
                    "</div>";
                if(bFolder){strFolder+=htxt;}else{strText+=htxt;}
            }
            
            //显示菜单
            if(items.length>0)
            {
                popw.document.write(strFolder+strText);
                popw.show(left,top, width, height, document.body);
            }
        }
      

  7.   

    //菜单类的私有函数:隐藏所有的弹出菜单
        FrameMenuConfig.hideAllWindows=function()
        {
            for(var n=0;null!=FrameMenuConfig.WindowsList && n<FrameMenuConfig.WindowsList.length;n++)
            {
                if(null!=FrameMenuConfig.WindowsList[n] && null!=FrameMenuConfig.WindowsList[n].hide)
                {
                    FrameMenuConfig.WindowsList[n].hide();
                }
            }
        }
        //菜单类的私有函数:创建菜单(一级菜单)control是菜单容器名,bremove是否移除,一般是添加到层中
        FrameMenuConfig.createFrameMenu=function(control,bremove)
        {
            var ele=$(control);
            if(bremove)
            {
                ele.innerHTML="";
            }
            var items=FrameMenuConfig.getSubItems();
            for(var n=0;n<items.length;n++)
            {
                var item=items[n];
                var bFolder=FrameMenuConfig.getSubItems(item.id).length>0;
                var url="javascript:{FrameMenuConfig.goto('"+(null==item.url?"":item.url)+"','"+(null==item.target?"":item.target)+"');}";
                var ah=document.createElement("<a href=\""+url+"\" onmouseover=\"FrameMenuConfig.showMenu(this,'"+item.id+"',1)\">");
                ah.innerHTML=item.title;
                ele.appendChild(ah);
            }
        }
        
        //根据父菜单ID获取子菜单项
        FrameMenuConfig.getSubItems=function(pid)
        {
            if(null==pid)
            {
                return window.FrameMenu.Items;
            }
            else
            {
                var item=FrameMenuConfig.ID2Item[pid];
                if(null==item)
                {
                    return new Array();
                }
                else
                {
                    return item.Items;
                }
            }
        }
        //转向链接(url:要转向的页;target:目标框架名)
        FrameMenuConfig.goto=function(url,target)
        {
            FrameMenuConfig.hideAllWindows();
            if(null==url||url.length<1)
            {
                return;
            }
            if(null==target||target.length<1)
            {
                target=FrameMenuConfig.DefaultTarget;
            }
            if(null!=target && target.length>0&& target.toLowerCase()!="_self"&& target.toLowerCase()!="self")
            {
                if(target.toLowerCase()=="_blank")
                {
                    window.open(url);
                }
                else
                {
                    if(window.parent==null||null==window.parent.frames[target])
                    {
                        alert("輻痋粕等饜离粕等渣昫ㄛ梑祥善痋 "+target);
                        return;
                    }
                    else
                    {
                        window.parent.frames[target].location=url;
                    }
                }
            }
            else
            {
                window.location=url;
            }
        }
        //初始化菜单的样式
        FrameMenuConfig.initlize=function()
        {
            FrameMenuConfig.ItemHeight=Math.max(12,FrameMenuConfig.ItemHeight);
            FrameMenuConfig.WindowsWidth=Math.max(80,FrameMenuConfig.WindowsWidth);
            document.focus();
            document.onfocusout=function()
            {
                FrameMenuConfig.hideAllWindows();
            }
            FrameMenuConfig.CssText="";
            for(var n=0;FrameMenuConfig.CssPrefix!=null && FrameMenuConfig.CssPrefix.length>0 && n<document.styleSheets.length;n++)
            {
                var sts=document.styleSheets[n];
                for(var x=0;x<sts.rules.length;x++)
                {
                    var rr=sts.rules[x];
                    if(rr.selectorText.indexOf(FrameMenuConfig.CssPrefix)>=0)
                    {
                        FrameMenuConfig.CssText+=rr.selectorText+"{"+rr.style.cssText+"}";
                    }
                }
            }
        }
    }</script>
    /*调用示例:
    var nodeList;//所有模块节点
    window.onload = function()
    {
    FrameMenuConfig.CssPrefix="#fm_Container";
    FrameMenuConfig.FolderImage="../Images/leftbtn.png";
    FrameMenuConfig.WindowsWidth = 120;
    FrameMenuConfig.ItemHeight = 25;
    oXmlDoc = Menu.getAllModules($("Tb_RoleId").value).value;//利用Ajax函数获取xml文档
    nodeList = oXmlDoc.selectNodes("Modules/Module");//所有模块节点
    //首页、登录、注销
    FrameMenu.insert(null,"","办公室","../../BiaoZhun/Web/MyWork.aspx?ListCode=0500000000","mainform");
    FrameMenu.insert(null,"","我的事业","LoginForm.aspx?Type=LogIn","mainform");
    //其它节点
    InsertNode("0000000000");
    FrameMenuConfig.createFrameMenu("fm_MainContainer",false);
    }
    //递归插入节点
    function InsertNode(pcode)
    {
    var deep = GetLevel(pcode);//获得深度
    for (var i=0;i < nodeList.length;i++)
    {
    var subNodes = nodeList[i].childNodes;
    if((subNodes.item(0).text.substr(0,deep*2) == pcode.substr(0,deep*2)) && (subNodes.item(0).text.substr((deep+1)*2) == pcode.substr((deep+1)*2)) && (subNodes.item(0).text != pcode))
    {
    FrameMenu.insert((pcode=="0000000000"?null:pcode),subNodes.item(0).text,subNodes.item(1).text,subNodes.item(2).text + (subNodes.item(2).text.indexOf('?')>-1?'&':'?') + 'ListCode=' + subNodes.item(0).text,subNodes.item(3).text);
    InsertNode(subNodes.item(0).text);
    }
    }
    }
    //根据code获得级别
    function GetLevel(strCode)
    {
    var strTemp = "";
    var level = 0;
    for(var i = 0;i < 2;i ++)
    {
    strTemp += "0";
    }
    while(level*2 < strCode.length && strCode.substr(level*2,2) != strTemp)
    level++;
    return level;
    }*/
    /*                                                           c#函数namespace WebEdit.Table.Impl
    {
    /// <summary>
    /// Menu 的摘要说明。
    /// </summary>
    public class Menu
    {
    public Menu()
    {
    //
    // TODO: 在此处添加构造函数逻辑
    //
    }

    /// <summary>
    /// 根据角色获取所有的模块信息
    /// </summary>
    /// <param name="RoleId"></param>
    /// <returns></returns>
    [Ajax.AjaxMethod]
    public XmlDocument getAllModules(string RoleId)
    {
    string strSql = "SELECT DISTINCT"; 
    strSql += " JXNF_MODULELIST.LISTCODE as ListCode,";
    strSql += " JXNF_MODULELIST.LISTNAME as ListName,";
    strSql += " JXNF_MODULELIST.STRNAVIGATEURL as Url,";
    strSql += " JXNF_MODULELIST.STRTARGET as Target";
    strSql += " FROM JXNF_MODULELIST,JXNF_R2M";
    strSql += " WHERE JXNF_MODULELIST.LISTID = JXNF_R2M.LISTID";
    strSql += " AND JXNF_R2M.ROLEID IN (" + RoleId.ToString() + ")";
    strSql += " ORDER BY JXNF_MODULELIST.LISTCODE ASC"; DataTable dt = Util.DBFactory.NonTransactionPowerPlant.ExecuteDataTable(strSql);//执行sql语句返回Table数据以打包可以自己写 XmlDocument XmlDoc = new XmlDocument();
    XmlDeclaration Xml_Note = XmlDoc.CreateXmlDeclaration("1.0","gb2312",null);   
    XmlDoc.AppendChild(Xml_Note);
        
    //加入一个根元素
    XmlElement Xml_Root = XmlDoc.CreateElement ( "" , "Modules" , "" ) ;
    XmlDoc.AppendChild(Xml_Root) ; for(int i = 0;i < dt.Rows.Count;i ++)
    {
    XmlElement Xml_Info = XmlDoc.CreateElement("Module");
    Xml_Root.AppendChild(Xml_Info); for(int j = 0;j < dt.Columns.Count;j ++)
    {
    XmlElement Xml_Item = XmlDoc.CreateElement(dt.Columns[j].ColumnName);
    Xml_Item.InnerText = dt.Rows[i][j].ToString(); Xml_Info.AppendChild(Xml_Item);
    }
    }
    return XmlDoc;
    }
    }
    }
    */
      

  8.   

    编码还有问题啊alert()函数内容不对头嘛
      

  9.   

    哈哈,非常感謝 fastrunman ,果真是力氣活啊.alert內容是我自行加上的,因為繁簡體原因