Avatar billede klaf Nybegynder
02. oktober 2002 - 15:35 Der er 12 kommentarer og
1 løsning

skifte class i folde menu

Hej
Jeg har fået nedenstående script, men kan ikke gennemskue hvordan jeg kan skifte class i menuen når menuen er aktiv.
Jeg kan se, at der skiftes <mg src> på pilen.
Der må kunne laves tilsvarende med <span class>?

(her begynder scriptet)

<html>
<head>
<title>DHTMLCentral.com - Free Dynamic HTML Scripts - FoldoutMenu Demo</title>
<meta name="Author" content="Thomas Brattli (webmaster@dhtmlcentral.com)">
<META NAME="Generator" CONTENT="Designer:Thomas Brattli (www.bratta.com)">
<meta name="KeyWords" content="DHTML, HTML, Dynamic HTML, Javascript, Cascading Style Sheets, Cross-browser, Cross browser, Javascripts, DOM, Scripts, Free Scripts,menu,foldoutmenu,hierarchical,expandable,collapsable,outlines,">
<meta name="Description" content="Dynamic HTML Central - The ultimate place to find DHTML scripts, demos, tutorials and help.">
<style type="text/css">
#divCont {position:absolute; z-index:1; left:50px; top:70px; height:400px; width:170px; visibility:hidden;}
.clTop  {position:absolute; z-index:1; width:170px; line-height:17px;}
.clSub  {position:absolute; z-index:1; left:0px; top:20px; width:170px; line-height:14px;}

/*** This sets the style for the links inside the menu. ***/
#divCont .clTop a {color:#000000; font-family:verdana,arial,helvetica,sans-serif; font-size:14px; font-weight:bold; text-decoration:none;}
#divCont .clTop a:hover {color:#000000; text-decoration:none;}
#divCont .clTop .clSub a {color:#777777; font-family:verdana,arial,helvetica,sans-serif; font-size:12px; font-weight:normal; text-decoration:none;}
#divCont .clTop .clSub a:hover {color:#333333; text-decoration:none;} 

SPAN{
color: #FFFFFF;
z-index: 2;
width: 141px;
height: 20px;
text-indent: 5px;
font-size: 12px;
font-family: arial;
font-weight: bold;
cursor: pointer;
}

SPAN.knap{
background-color: #0000ff;
}
SPAN.aktiv{
background-color: #000000;
}


</style>
<script language="JavaScript" type="text/javascript">
/********************************************************************************** 
FoldoutMenu
*  Copyright (C) 2001 <a href="/dhtmlcentral/thomas_brattli.asp">Thomas Brattli</a>
*  This script was released at DHTMLCentral.com
*  Visit for more great scripts!
*  This may be used and changed freely as long as this msg is intact!
*  We will also appreciate any links you could give us.
*
*  Made by <a href="/dhtmlcentral/thomas_brattli.asp">Thomas Brattli</a>
*********************************************************************************/

function lib_bwcheck(){ //Browsercheck (needed)
this.ver=navigator.appVersion
this.agent=navigator.userAgent
this.dom=document.getElementById?1:0
this.opera5=this.agent.indexOf("Opera 5")>-1
this.ie5=(this.ver.indexOf("MSIE 5")>-1 && this.dom && !this.opera5)?1:0;
this.ie6=(this.ver.indexOf("MSIE 6")>-1 && this.dom && !this.opera5)?1:0;
this.ie4=(document.all && !this.dom && !this.opera5)?1:0;
this.ie=this.ie4||this.ie5||this.ie6
this.mac=this.agent.indexOf("Mac")>-1
this.ns6=(this.dom && parseInt(this.ver) >= 5) ?1:0;
this.ns4=(document.layers && !this.dom)?1:0;
this.bw=(this.ie6 || this.ie5 || this.ie4 || this.ns4 || this.ns6 || this.opera5)
return this
}
var bw=new lib_bwcheck()



/*** variables you can configure ***/

FoldNumber = 6 //How many toplinks do you have?
var stayFolded = false //Stay open when you click a new toplink?
foldImg = 1 //Do you want images (if not set to 0 and remove the images from the body)?
mainOffsetY = 0 //Vertical space adjustment between the main items, in pixels.

//This is the default image.
//Remember to change the actual images in the page as well, but remember to keep the name of the image.
var unImg=new Image();
unImg.src='foldoutmenu_arrow.gif'

var exImg=new Image(); //Making an image variable...
exImg.src='foldoutmenu_arrow_open.gif' //...this is the source of the image that it changes to when the menu expands.

// NOTE: if you change the position of divCont from absolute to relative, you can put the foldoutmenu in a table.
// HOWEVER it will no longer work in netscape 4. If you wish to support netscape 4, you have to use absolute positioning.

/*** There should be no need to change anything beyond this. ***/

// A unit of measure that will be added when setting the position of a layer.
var px = bw.ns4||window.opera?"":"px";

if(navigator.userAgent.indexOf('Opera')>-1 && document.getElementById){ //Opera 5 resize fix.
scrX= innerWidth; scrY= innerHeight;
document.onmousemove= function(){
if(scrX<innerWidth-10 || scrY<innerHeight-10 || scrX>innerWidth+10 || scrY>innerHeight+10){
scrX = innerWidth;
scrY = innerHeight;
initFoldout();
}
};
}

//object constructor...
function makeMenu(obj,nest){
nest= (!nest)?"":'document.'+nest+'.';
this.el= bw.ie4?document.all[obj]:bw.ns4?eval(nest+'document.'+obj):document.getElementById(obj);
  this.css= bw.ns4?this.el:this.el.style;
this.ref= bw.ns4?this.el.document:document;
this.x= (bw.ns4||bw.opera5)?this.css.left:this.el.offsetLeft;
this.y= (bw.ns4||bw.opera5)?this.css.top:this.el.offsetTop;
this.h= (bw.ie||bw.ns6)?this.el.offsetHeight:bw.ns4?this.ref.height:bw.opera5?this.css.pixelHeight:0;
    this.vis= b_vis;
this.hideIt= b_hideIt;
    this.showIt= b_showIt;
    this.moveIt= b_moveIt;
return this
}
//object methods...
function b_showIt(){this.css.visibility='visible'}
function b_hideIt(){this.css.visibility='hidden'}
function b_vis(){if(this.css.visibility=='hidden' || this.css.visibility=='HIDDEN' || this.css.visibility=='hide') return true;}
function b_moveIt(x,y){this.x=x; this.y=y; this.css.left=this.x+px; this.css.top=this.y+px}

/************************************************************************************
This is the function that changes the sub menus to folded or unfolded state.
************************************************************************************/
function menu(num){
if(bw.bw){
if (!stayFolded){
for (var i=0; i<oSub.length; i++){
if (i!=num){
oSub[i].hideIt()
if (foldImg)oTop[i].ref["imgA"+i].src = unImg.src
}
}
for(var i=1; i<oTop.length; i++){
oTop[i].moveIt(0,oTop[i-1].y+oTop[i-1].h)
}
}
if (oSub[num].vis()){
oSub[num].showIt()
if (foldImg)oTop[num].ref["imgA"+num].src = exImg.src
}else{
oSub[num].hideIt()
if(foldImg)oTop[num].ref["imgA"+num].src = unImg.src
}
for(var i=1; i<oTop.length; i++){
if (!oSub[i-1].vis()) oTop[i].moveIt(0,oTop[i-1].y+oTop[i-1].h+oSub[i-1].h+mainOffsetY)
else oTop[i].moveIt(0,oTop[i-1].y+oTop[i-1].h+mainOffsetY)
}
}
}

/*********************************************************************
The init function... there should be no need to change anything here.
*********************************************************************/
function initFoldout(){
//Fixing the browsercheck for opera... this can be removed if the browsercheck has been updated!!
bw.opera5 = (navigator.userAgent.indexOf("Opera")>-1 && document.getElementById)?true:false
if (bw.opera5) bw.ns6 = 0

oTop = new Array()
oSub = new Array()
//Making the objects and hiding the subs...
for (var i=0; i<FoldNumber; i++){
oTop[i] = new makeMenu('divTop'+i,'divCont')
oSub[i] = new makeMenu('divSub'+i,'divCont.document.divTop'+i)
oSub[i].hideIt()
}

//Positioning the top objects...
oTop[0].moveIt(0,0)
for (var i=1; i<oTop.length; i++){
oTop[i].moveIt(0, oTop[i-1].y+oTop[i-1].h+mainOffsetY)
}

//Making the containing menu object and showing it...
oCont = new makeMenu('divCont')
oCont.showIt()
}

// If the browser is ok, the script is started onload...
if(bw.bw) onload = initFoldout;
</script>
</head>

<body marginleft="0" marginheight="0">
<!-- START DELETE -->
<div style="position:absolute; left:0; top:0"><a href="#" onclick="self.close(); return false"><img src="/images/logo.gif" width="165" height="54" alt="" border="0" alt="Click to close window"></a></div>
<br><br><br>
<!-- END DELETE -->

<div id="divCont"> <!-- These are the contents of the foldoutmenu. -->

<div id="divTop0" class="clTop"><a href="#" onclick="menu(0); return false" onfocus="this.blur()"><img src="foldoutmenu_arrow.gif" name="imgA0" width=12 height=12 alt="" border="0"><span class="knap"> Menu 1 </span></a><br>
<div id="divSub0" class="clSub">
<a href="#">This is a link</a><br>
<a href="#">This is a link</a><br>
</div><br>
</div>

<div id="divTop1" class="clTop"><a href="#" onclick="menu(1); return false" onfocus="this.blur()"><img src="foldoutmenu_arrow.gif" name="imgA1" width=12 height=12 alt="" border="0"><span class="knap"> Menu 2 </span></a><br>
<div id="divSub1" class="clSub">
<a href="#">This is a link</a><br>
<a href="#">This is a link</a><br>
</div><br>
</div>

<div id="divTop2" class="clTop"><a href="#" onclick="menu(2); return false" onfocus="this.blur()"><img src="foldoutmenu_arrow.gif" name="imgA2" width=12 height=12 alt="" border="0"><span class="knap"> Menu 3 </span></a><br>
<div id="divSub2" class="clSub">
<a href="#">This is a link</a><br>
<a href="#">This is a link</a><br>
<a href="#">This is a link</a><br>
</div><br>
</div>

<div id="divTop3" class="clTop"><a href="#" onclick="menu(3); return false" onfocus="this.blur()"><img src="foldoutmenu_arrow.gif" name="imgA3" width=12 height=12 alt="" border="0"><span class="knap"> Menu 4 </span></a><br>
<div id="divSub3" class="clSub">
<a href="#">This is a link</a><br>
<a href="#">This is a link</a><br>
<a href="#">This is a link</a><br>
</div><br>
</div>

<div id="divTop4" class="clTop"><a href="#" onclick="menu(4); return false" onfocus="this.blur()"><img src="foldoutmenu_arrow.gif" name="imgA4" width=12 height=12 alt="" border="0"><span class="knap"> Menu 5 </span></a><br>
<div id="divSub4" class="clSub">
<a href="#">This is a link</a><br>
<a href="#">This is a link</a><br>
<a href="#">This is a link</a><br>
<a href="#">This is a link</a><br>
<a href="#">This is a link</a><br>
</div><br>
</div>

<div id="divTop5" class="clTop"><a href="#" onclick="menu(5); return false" onfocus="this.blur()"><img src="foldoutmenu_arrow.gif" name="imgA5" width=12 height=12 alt="" border="0"><span class="knap"> Menu 6 </span></a><br>
<div id="divSub5" class="clSub">
<a href="#">This is a link</a><br>
<a href="#">This is a link</a><br>
</div><br>
</div>

</div> <!-- Here ends the foldoutmenu. -->




</body>
</html>
Avatar billede Slettet bruger
02. oktober 2002 - 20:30 #1
Præcis hvad vil du skifte class for? Og hvornår (når et punkt er foldet ud, eller hvad)?
Avatar billede klaf Nybegynder
02. oktober 2002 - 21:37 #2
Jeg vil gerne kunne skifte bagrundsfarve, skrift og border når menuen er foldet ud.
Avatar billede Slettet bruger
03. oktober 2002 - 14:48 #3
På hvad? På linksene, der åbner menuerne, eller på underpunkterne?
Avatar billede klaf Nybegynder
07. oktober 2002 - 22:31 #4
På toplink. Ikke underpunkter. Men princippet er vel det samme?
Avatar billede Slettet bruger
08. oktober 2002 - 17:28 #5
Det gør det meget nemmere:

<div id="divTop0" class="clTop"><a href="#" onclick="document.getElementById('divTop0').className = 'andenClass'; menu(0); return false" onfocus="this.blur()"><img src="foldoutmenu_arrow.gif" name="imgA0" width=12 height=12 alt="" border="0"><span class="knap"> Menu 1 </span></a><br>
Avatar billede Slettet bruger
08. oktober 2002 - 17:34 #6
Nej, det skal i virkeligheden være lidt mere avanceret, for det giver kun en class, når man trykker på linket:

<script>
foer = null;

function skift(nr) {
obj = (document.getElementById) ? document.getElementById("divTop" + nr) : document.all["divTop" + nr];
obj.className = (obj.className == "clTop") ? "andenClass" : "clTop";
if (obj.className == "clTop" && foer) {
foer.className = "clTop";
foer = obj;
}
}
</script>

Kaldes med:

<div id="divTop0" class="clTop"><a href="#" onclick="skift(0); menu(0); return false" onfocus="this.blur()"><img src="foldoutmenu_arrow.gif" name="imgA0" width=12 height=12 alt="" border="0"><span class="knap"> Menu 1 </span></a><br>
Avatar billede klaf Nybegynder
08. oktober 2002 - 17:59 #7
Tak for svaret.
Men det er class for <span class="knap"> jeg gerne vil lave om til <span class="aktiv">
*****
<div id="divTop0" class="clTop"><a href="#" onclick="skift(0); menu(0); return false" onfocus="this.blur()"><img src="foldoutmenu_arrow.gif" name="imgA0" width=12 height=12 alt="" border="0"><span class="knap"> Menu 1 </span></a><br>
Avatar billede Slettet bruger
08. oktober 2002 - 18:01 #8
OK, så giv hver span en id:

<span class="knap" id="nr0">

... og ændr scriptet til dette:

<script>
foer = null;

function skift(nr) {
obj = (document.getElementById) ? document.getElementById("nr" + nr) : document.all["nr" + nr];
obj.className = (obj.className == "knap") ? "aktiv" : "knap";
if (obj.className == "knap" && foer) {
foer.className = "aktiv";
foer = obj;
}
}
</script>

Så skulle det gerne virke. Linket skal være som før!
Avatar billede klaf Nybegynder
09. oktober 2002 - 00:25 #9
Nu virker det næsten.. jeg mangler bare at skifte class'en tilbage igen, når jeg vælger en anden top-menu... sådan så det kun er den top-menu der er trykket sidst på der har en <span class="aktiv">
Avatar billede Slettet bruger
11. oktober 2002 - 16:35 #10
Jeg havde lavet en fejl i scriptet:

<script>
foer = null;

function skift(nr) {
obj = (document.getElementById) ? document.getElementById("nr" + nr) : document.all["nr" + nr];
obj.className = (obj.className == "knap") ? "aktiv" : "knap";
if (obj.className == "knap" && foer) {
foer.className = "knap";
foer = obj;
}
}
</script>

Det skulle meget gerne løse dit problem.
Avatar billede klaf Nybegynder
13. oktober 2002 - 23:46 #11
Det virker desværre stadig ikke.. Jeg kan stadig have flere der har <Class="Aktiv">
Avatar billede Slettet bruger
21. oktober 2002 - 08:44 #12
Prøv dette så:

<script>
foer = null;

function skift(nr) {
obj = (document.getElementById) ? document.getElementById("nr" + nr) : document.all["nr" + nr];
if (foer && foer != nr)
foer.className = "knap";
obj.className = (obj.className == "knap") ? "aktiv" : "knap";
foer = obj;
}
</script>
Avatar billede klaf Nybegynder
29. oktober 2002 - 09:14 #13
Tak!! Nu virker det som det skal...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester