在IE和NETSCAPE都可运行的菜单(ie4,ns4以上都行,测试过)图片自己找吧
<HTML>
<HEAD>
<TITLE>WebBrancher</TITLE>
<script language="JavaScript">
var tagerhao=true;
var isNS  = false;
var isIE  = false;
if (parseInt(navigator.appVersion) >= 4) {
        if (navigator.appName == "Netscape") {
                isNS = true;
        } else if(navigator.appName == "Microsoft Internet Explorer"){
                isIE = true;
        }
}
function startit(a,b,c,d,e,f,g,h,i){
menuTree = menuTree.addItem(new obj_node(a,b,c,d,e,f,g,h,i));}
function openit(){ createAppearanceArray(menuTree,menuTree.itemWithID('root'))
treeVariable = menuTree;
expandNode('root');//expandNode('fold-001');expandNode('fold-0013');expandNode(a);
}
</script>
<meta name="keywords" content="menu,tree,folder,explorer,ie,netscape,菜单,折叠菜单,树型菜单,折叠,树型,文件夹,frame,frameset">
<meta name="description" content="树型导航菜单。">
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<LINK href="uniStyle.css" rel=stylesheet>
<script language="JavaScript" src="new2001.js"></script>
<SCRIPT ID=clientEventHandlersJS LANGUAGE=javascript>
<!--
function idMsg_onresize() {
if (isIE) {
lh= window.idMsg.offsetHeight;
window.jkform.style.top = lh+10;}
}
function outfunc() {
if(isNS){
document.layers.jkform.top=document.layers.idMsg.document.height+10
//alert(document.layers.idMsg.document.height)
}}
function aaa(){
//alert(window.treeform.node.value)
//expandNode(window.treeform.node.value);
alert( clicknode)
//var collapse
}
//-->
</SCRIPT>
</HEAD>
<BODY onload="startMenu()" bgcolor=#ffffff>
<br>
<div id="idMsg" style="HEIGHT: 10px; LEFT: 5px; POSITION: absolute; TOP: 5px" LANGUAGE=javascript onresize="return idMsg_onresize()">
正在展开目录结构......
</div>
<div id="jkform" style="POSITION: absolute; TOP: 300px">
<form name="treeform" id="treeform" method=post>
节点ID:<INPUT name="text1" id="text1" >
节点名字:<INPUT id=text2 name=text2 > 父节点ID:<INPUT 
id=text3 name=text3><br>
文件类型<INPUT id=text4 name=text4>连接URL<INPUT id=text5 name=text5>ALT提示:<INPUT 
id=text6 name=text6><br>
显示图片:<INPUT id=text7 name=text7>节点顺序:<INPUT id=text8 name=text8>打开方向:<INPUT 
id=text9 name=text9><br>
<INPUT type="button" value="add"
 id=button1 name=button1 onclick="startit(document.treeform.text1.value,document.treeform.text2.value,document.treeform.text3.value,document.treeform.text4.value,document.treeform.text5.value,document.treeform.text6.value,document.treeform.text7.value,document.treeform.text8.value,document.treeform.text9.value)">
 <INPUT type=button value=open onclick="openit()"></form></TD></TD></TR></div> 
</BODY>
</HTML>

解决方案 »

  1.   

    ////new2001.js --1
    var treevar
    var showroot
    var menuTree
    var tagerhao
    var clicknode
    var collapse
    function outlysjunzi() {
    if (tagerhao) outfunc(); }function startMenu() {
    imageDirectory = 'bird_img'; //图片目录
    clicknode='|'
    collapse='|'
    menuTree = new obj_collection()
    defineMenuItems(menuTree)
    createAppearanceArray(menuTree,menuTree.itemWithID('root'))
    treeVariable = menuTree;
    expandNode('root');
    }
    function obj_node(id,name,parentID,type,url,alt,altImage,position,target) {
    this.id = id.toLowerCase();
    this.name = name;
            this.parentID = parentID.toLowerCase();
    this.type = type.toLowerCase();
    this.url = url;
    this.alt = alt;
    this.altImage = altImage;
    this.position = position;
    this.target = target;
    }function obj_collection() {
    this.addItem = addItem;
    this.itemWithID = itemWithID;
    this.itemIDExists = itemIDExists;
    this.extractExpandableNodes = extractExpandableNodes;
    this.posOfItemWithID = posOfItemWithID;
    this.length = 0;
    return this
    }function obj_array(size) {
    this.length = size;
    this.itemWithID = itemWithID;
    this.itemIDExists = itemIDExists;
    this.posOfItemWithID = posOfItemWithID;
    return this
    }function obj_appearanceNode(id,imageSequence,name,parentID,type,url,alt,target,visable) {
    this.id = id;
    this.imageSequence = imageSequence;
    this.name = name;
    this.parentID = parentID;
    this.type = type;
    this.url = url;
    this.alt = alt;
    this.target = target;
    this.visable = visable;
    return this
    }function createAppearanceArray(treeVariable,startNode) {
    appearanceArray = new obj_array(treeVariable.length);
    appearancePos = 1;
    if (startNode.type == 'page') {alert("The createAppearanceArray() function can only be called on a root or folder node.")}
    else {createAppearanceBranch(treeVariable,startNode)}
    }function createAppearanceBranch(treeVariable,startNode) {
    if (startNode.type == 'root') {if (startNode.altImage == '') {var iconImage = 'img-globe.gif'}
           else {var iconImage = startNode.altImage}
           var newAppNode = new obj_appearanceNode(startNode.id,iconImage,startNode.name,'',startNode.type,startNode.url,startNode.alt,startNode.target,true)
           appearanceArray[appearancePos] = newAppNode;
           appearancePos = appearancePos + 1}
    if (startNode.type == 'folder') {var newAppNode = new obj_appearanceNode(startNode.id,'',startNode.name,startNode.parentID,startNode.type,startNode.url,startNode.alt,startNode.target,false);
                  var appearanceStr = addStringToStart('','img-folder.gif');
          var lengthOfBranch = extractChildren(treeVariable,treeVariable.itemWithID(startNode.parentID)).length;
          if (startNode.position == lengthOfBranch) {appearanceStr = addStringToStart(appearanceStr,'img-plus-end.gif|')}
          else {appearanceStr = addStringToStart(appearanceStr,'img-plus-cont.gif|')}
          appearanceStr = addStringToStart(appearanceStr,createParentalStructure(treeVariable,startNode.id));
          newAppNode.imageSequence = appearanceStr;
          appearanceArray[appearancePos] = newAppNode;
          appearancePos = appearancePos + 1}
          if (startNode.type == 'page') {var newAppNode = new obj_appearanceNode(startNode.id,'',startNode.name,startNode.parentID,startNode.type,startNode.url,startNode.alt,startNode.target,false);
           if (startNode.altImage == '') {var appearanceStr = 'img-page.gif'}
           else {var appearanceStr = startNode.altImage}
           var lengthOfBranch = extractChildren(treeVariable,treeVariable.itemWithID(startNode.parentID)).length;
           if (startNode.position == lengthOfBranch) {appearanceStr = addStringToStart(appearanceStr,'img-branch-end.gif|')}
           else {appearanceStr = addStringToStart(appearanceStr,'img-branch-cont.gif|')}
           appearanceStr = addStringToStart(appearanceStr,createParentalStructure(treeVariable,startNode.id));
    newAppNode.imageSequence = appearanceStr;
           appearanceArray[appearancePos] = newAppNode;
           appearancePos = appearancePos + 1
           }
    else {
    var nodeChildren = extractAndSortChildren(treeVariable,startNode);
    var lengthOfBranch = nodeChildren.length;
    var currentIndex = 1;
    while (currentIndex <= lengthOfBranch) {createAppearanceBranch(treeVariable,nodeChildren[currentIndex])
    currentIndex = currentIndex + 1}
         }
    }
      

  2.   

    function collapseNode(nodeID) {
    var startingPos = appearanceArray.posOfItemWithID(nodeID) + 1;
    childCount = 0;
    countChildrenOf(treeVariable,nodeID);
    var endPos = (startingPos + childCount) - 1;
    var nodeposition=collapse.indexOf('|'+ nodeID +'|')
    if (nodeposition == -1){
    collapse=collapse + nodeID + '|' ; }
    if (endPos < startingPos) {endPos = startingPos + ((extractChildren(treeVariable,treeVariable.itemWithID(nodeID)).length) - 1) } currentIndex = startingPos
    while (currentIndex <= endPos) {
    if (appearanceArray[currentIndex].type == 'folder') {if ((appearanceArray[currentIndex].imageSequence).indexOf("img-folder-open.gif") != -1) {collapseAppearance(appearanceArray[currentIndex]); appearanceArray[currentIndex].visable = false}
         else {appearanceArray[currentIndex].visable = false}
        }
    else {appearanceArray[currentIndex].visable = false}
    currentIndex = currentIndex + 1
    } collapseAppearance(appearanceArray.itemWithID(nodeID))
    timeOutId = setTimeout("drawMenu(appearanceArray)",0);
    }function collapseAppearance(arrayNode) {
    var imageSequence = arrayNode.imageSequence;
    var newImage = "img-plus-cont.gif";
    var oldCont = "img-minus-cont.gif";
    var oldEnd = "img-minus-end.gif";
    var oldLength = oldCont.length;
    var plusPosition = imageSequence.indexOf(oldCont)
    if (plusPosition == -1) {plusPosition = imageSequence.indexOf(oldEnd); newImage = "img-plus-end.gif"; oldLength = oldEnd.length} var newAppearance = imageSequence.substring(0,plusPosition) + newImage + "|img-folder.gif"
    arrayNode.imageSequence = newAppearance;
    }function expandNode(nodeID) {
    var lengthOfArray = appearanceArray.length;
    var currentIndex = 1;
    var nodeposition=clicknode.indexOf('|'+ nodeID +'|')
    if (nodeposition == -1){
    clicknode=clicknode + nodeID + "|" }
    while (currentIndex <= lengthOfArray) {
    if ((appearanceArray[currentIndex].id == nodeID) || (appearanceArray[currentIndex].parentID == nodeID)) {appearanceArray[currentIndex].visable = true;
         
         if (appearanceArray[currentIndex].id == nodeID) {var parentIndex = currentIndex}
         }
    currentIndex = currentIndex + 1;
    }
    if (appearanceArray[parentIndex].type != 'root') {
    expandAppearance(appearanceArray[parentIndex])}
    timeOutId = setTimeout("drawMenu(appearanceArray)",0);

    }function expandAppearance(arrayNode) {
    var imageSequence = arrayNode.imageSequence;
    var newImage = "img-minus-cont.gif";
    var oldCont = "img-plus-cont.gif";
    var oldEnd = "img-plus-end.gif";
    var oldLength = oldCont.length;
    var plusPosition = imageSequence.indexOf(oldCont)
    if (plusPosition == -1) {plusPosition = imageSequence.indexOf(oldEnd); newImage = "img-minus-end.gif"; oldLength = oldEnd.length} var newAppearance = imageSequence.substring(0,plusPosition) + newImage + "|img-folder-open.gif";
    arrayNode.imageSequence = newAppearance;
    }function drawMenu(appearanceArray) {
    var lengthOfArray = appearanceArray.length;
    var currentIndex = 1,isNS,isIE,isIE4,isIE5;
    treevar = ''
    if (parseInt(navigator.appVersion) >= 4) {
            if (navigator.appName == "Netscape") {
                    isNS = true;
            } else if(navigator.appName == "Microsoft Internet Explorer"){
                    isIE = true;
                    if (navigator.appVersion.indexOf("MSIE 4") != -1) {isIE4 = true}
                    if (navigator.appVersion.indexOf("MSIE 5") != -1) {isIE5 = true}
            }
    }
    while (currentIndex <= lengthOfArray) {
    if (appearanceArray[currentIndex].visable == true){drawNode(appearanceArray[currentIndex])}
    currentIndex = currentIndex + 1;
    }

    if ( isIE ) { document.all.idMsg.innerHTML = treevar;}
            if ( isNS ) { document.layers.idMsg.document.write ( treevar ); document.layers.idMsg.document.close();}
            outlysjunzi();
    }
    function drawNode(node) {
    var imageSequence = node.imageSequence;
    writeImageSequence(node,imageSequence);
    //if (node.type == 'root') {nodeName = node.name}
    //else {nodeName = node.name}
    nodeName = node.name
    if (node.target == '') {var nodeTarget = 'PageFrame'}
    else {nodeTarget = node.target}

    if ((node.type=='root')&&(showroot==true)||(node.type!='root')) {

    if (node.type=='folder'){
    var finished = false;
    var lengthOfString = imageSequence.length;
    var imageSeq = imageSequence;
    while (finished == false) {
    if (imageSeq == '') {finished = true}
    else {  imageString = stringUpToBar(imageSeq);
    if (imageString.length == imageSeq.length) {imageSeq = ''}
    else {imageSeq = imageSeq.substring(imageString.length + 1,imageSeq.length);}
    if ((imageString == 'img-plus-cont.gif') || (imageString == 'img-plus-end.gif')) {
    treevar=treevar+"&nbsp;<A CLASS=TREE HREF='" + node.url + "' TARGET='" + nodeTarget + "' title='"+ node.alt +"' onclick=javascript:expandNode('" + node.id + "')>" + nodeName + "</A><BR>"} 
    else

    {if ((imageString == 'img-minus-cont.gif') || (imageString == 'img-minus-end.gif')) {
    treevar=treevar+"&nbsp;<A CLASS=TREE HREF='" + node.url + "' TARGET='" + nodeTarget + "' title='"+ node.alt +"' onclick=javascript:collapseNode('" + node.id + "')>" + nodeName + "</A><BR>"}

    else {}

    } }}
    }
    else
    treevar=treevar+"&nbsp;<A CLASS=TREE HREF='" + node.url + "' TARGET='" + nodeTarget + "' title='"+ node.alt +"'>" + nodeName + "</A><BR>"}}function writeImageSequence(node,sequence) {
    var finished = false;
    var lengthOfString = sequence.length;
    var imageSeq = sequence;
    while (finished == false) {
    if (imageSeq == '') {finished = true}
    else {  imageString = stringUpToBar(imageSeq);
    if (imageString.length == imageSeq.length) {imageSeq = ''}
    else {imageSeq = imageSeq.substring(imageString.length + 1,imageSeq.length);}

    if ((imageString == 'img-plus-cont.gif') || (imageString == 'img-plus-end.gif')) {
    nodeIdent = "'" + node.id + "'"
    treevar=treevar+"<A CLASS=TREE HREF=javascript:expandNode(" + nodeIdent + ")><IMG SRC='" + imageDirectory + "/" + imageString + "' ALIGN=TEXTTOP BORDER=0></A>"}
    else {if ((imageString == 'img-minus-cont.gif') || (imageString == 'img-minus-end.gif')) {
    nodeIdent = "'" + node.id + "'"
    treevar=treevar+"<A CLASS=TREE HREF=javascript:collapseNode(" + nodeIdent + ")><IMG SRC='" + imageDirectory + "/" + imageString + "' ALIGN=TEXTTOP BORDER=0></A>"}
    else {if((node.type=='root')&&(showroot==true)||(node.type!='root')){treevar=treevar+"<IMG SRC='" + imageDirectory + "/" + imageString + "' ALIGN=TEXTTOP>"}}}

    }
    }

    }function stringUpToBar(string) {
    var lengthOfString = string.length;
    var currentIndex = 0;
    var newString = '';
    var finished = false;
    while (finished == false) {
    if (currentIndex == lengthOfString) {finished = true}
    else {
    if (string.charAt(currentIndex) == '|') {finished = true}
    else {newString = newString + string.charAt(currentIndex)}
    currentIndex = currentIndex + 1
         }
    if (currentIndex == lengthOfString) {finished = true}
    }
    return newString
    }function addStringToStart(existingString,addition) {
    newString = addition + existingString;
    return newString
    }
      

  3.   

    lysing(公民徽章),谢谢,可否说一下你的思路。我先试一下。
    份解决后奉上。
      

  4.   

    http://www.cranesnet.com/site/xbbs/index.html
    网络技术讨论--下载和演示都在这了。
    在这只能连续发3帖子,而且每次才给发100多行的代码。象这样的问题不是几个函数就能做到的,当然.net控件除外,那就限定只能用一个平台了。