22. april 2004 - 04:19Der er
12 kommentarer og 1 løsning
Foldeud menu - undgå rettehelvede
Jeg har sån' en foldeud menu på min side. Bruger ikke frames el. iframes, så derfor har jeg menukoden på samtlige sider.
Problemet opstår hvis jeg skal rette i menuen (fx tilføje nyt menupunkt) - så skal jeg rette på samtlige sider, hvilket ik er så skide spændende.
Er der nogen måder hvorpå man kan undgå dette?? Jeg tænker på om det fx. er muligt at linke sin menu fra en ekstern fil ind i en celle.....eller noget helt andet???
Jeg har lavet en miniudgave af min mennu - beklager at koden er lidt grim, men det burde fremgå hvilke del af koden jeg gerne vil ha ud. Håber du eller en anden kan hjælpe mig :o)
Mvh. Mikkel ************ <html> <head>
<link rel="stylesheet" href="artikel.css" type="text/css"> <script> ids = { // undermenuer for hvert menupunkt rod: new Array( "menu1" ) };
idObj = new Object(); // bruges til at huske de anvendte HTML-elementer
menuOff = false; // sættes sand for NS4 og evt andre browsere der ikke // understøtter denne menu function hentId( id, menu ) { if ( document.getElementById ) idObj[id] = document.getElementById(id); else if ( document.all ) idObj[id] = document.all[id]; if ( idObj[id] ) { return idObj[id]; } else { alert( "denne browser kan ikke håndtere menuen korrekt." ); menuOff = true; return null; } }; //end hentId( string ) -> HTNL element
function fold( id, parentMenu ) { // folder menupunkter ind og ud if ( menuOff || ! parentMenu ) return;
var menu = ids[parentMenu]; for (var i = 0; menu.length > i; i++) {
var el = idObj[menu[i]] || hentId(menu[i]); if ( ! el ) return; if ( menu[i]==id && el.style.display=="none" ) { el.style.display = "block"; } else { if ( ids[menu[i]] ) fold( "alle", menu[i] ); // luk alle undermenuer til denne el.style.display = "none"; }
Ingen overhovedet inden for et etableret programmeringsmiljø vil nogensinde anbefale, at man bruger en særdeles ressourcekrævende procedure flere gange end højst nødvendigt, derfor er din løsning gak i forhold til den jeg gav ...
Brug _kun_ document.write een gang, hvis du overhovedet kan komme af sted med det, saml udskriften smmen i en buffer først, det koster stort set intet !-)
Jeg kom til at acceptere fixxxers svar - selvom det var meningen af roenving skulle ha haft de fleste point. Har oprettet et nyt hvor du lige kan smide et svar roenving http://www.eksperten.dk/spm/492434
Og tak for hjælpen begge to - I er nogle knage!! :o)
... og roenving har i øvrigt helt ret. Enhver, der er vandt til at programmere/kode, kunne aldrig få skyggen af en tanke om at skrive ud til skærmen på den måde. Det er hel elementær viden, at det performer elendigt ... og det gælder i øvrigt alle sprog. Man har derfor forsynet flere sprog med en indbygget buffer-funktionalitet, som vi dog er nødt til at lave selv i JS. I øvrigt er det endnu mere effektivt at push'e til et array, som join'es tilsidst. På den måde opnår man en performance-forbedring på flere hundrede _gange_ ... vel at mærke ikke flere hundrede procent ;o)
Om det er få eller mange linier, så er det dårlig kodeskik - og det skal man aldrig lære videre :)
Hvis du så indregner forskellen mellem streng-konkatenering og udskrivning i en løkke - så kommer du lynhurtigt op i en faktor 'adskillige tusinde' ...! =8-O
Synes godt om
Ny brugerNybegynder
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.