03. juni 2005 - 15:30Der er
22 kommentarer og 3 løsninger
getElementBy flere name
Hej.
Jeg har brug for at sætte 2 til 4 display=none / block. Tænkte jeg kunne gøre dette via name="highlightsDescription" og document.getElementsByName('highlightsDescription').style.display='none';
Det kan man bare ikke. Så kan man tilgengæld gøre således: document.getElementsByName('highlightsDescription')[0].style.display='none'; Så vises den første ikke. Men nu har jeg altså 2 til 4 stykker.
Tænker så en funktion må kunne gøre det for mig og gør derfor således: <script language="JavaScript"> function highlightsMinimizer(todo) { i = 0; while(i<4) { document.getElementsByName('highlightsDescription')[i].style.display=todo; i++; } } </script>
Det virker bare heller ikke :) Hvad skal jeg dog gøre?
http://new.ontv.dk Det er de featured programmer der er i toppen (to grå bokse). Det driller mig helt vildt med nogle sessions i php lige nu, men det har jo ikke noget med javascript delen at gøre...
Btw er det det lille minus tegn i øverste højre hjørne i indholdsdelen der ikke virker. Korrekt. Den skal minimere de to bokse så beskrivelse og evt. billeder fjernes.
Jeg skal have oversat det en dag... HTML-delen virker alligevel jo ;)
Hvordan fixer jeg det uden brug af name? Det må kun lade sig gøre at bruge en fællesbetegnelse på nogle forskellige typer? Ellers må jeg indsætte et div, men kan det passe det ikke er muligt uden?
Du kan jo give dem en klasse eller udvide deres klasse med en ekstra - og så kikke efter den: <td class="minKlasse minSpecialKlasse" ........>
Derefter kan du lave et array med: var a = OBJECT.getElementsByTagName("td"); for (var i=0; i<a.length; i++) { if (a[i].className.indexOf("minSpecialKlasse")!=-1) { alert("GotYa!"); } }
Objektet 'OBJECT' kan være document, hvorved du leder mellem alle TD'er i dokumentet - men du kunne også indsnævre søgningen ved at lade det være et element ... f.eks. et div eller en tabel: var a = document.getElementById("HvadVedJeg").getElementsByTagName("td");
Ej hvor er det tarveligt :) Man kan ikke lave samme funktion bare med id i stedet vel? (Der er noget om man ikke må have to tags med ens id.) Kan man gøre det med class i stedet så?
Man kan sagtens have flere classes på et et element (adskilt med mellemrum !-) og en class behøver ikke optræde i et stylesheet, så der er en mulighed for at lave noget fiksfakseri ved at benytte sig af classNames, hvilket oles eksempel også præcis gør !-)
-- en generaliseret funktion kunne være sådan:
<script language="javascript" type="text/javascript"> function getElementsByClassName(c,t,e){ switch(getElementsByClassName.arguments.length){ case 0: return null; case 1: t = '*'; e = document; break; case 2: e = document; } var r = new Array(),tags = e.getElementsByTagName(t); for(i=0;tags.length>i;i++){ if(tags[i].className.indexOf(c) > -1)r[r.length] = tags[i]; } return (r.length>0)?r:null; } </script>
Okay, ud fra dit roenving og lidt andet :) function highlightsMinimizer(todo) { if(todo == \'hide\') { document.getElementById(\'highlightsMinimizerIcon\').style.display=\'none\'; document.getElementById(\'highlightsMaximizerIcon\').style.display=\'inline\'; set = \'none\'; } else { document.getElementById(\'highlightsMinimizerIcon\').style.display=\'inline\'; document.getElementById(\'highlightsMaximizerIcon\').style.display=\'none\'; set = \'inline\'; } i = 0; var elms = getElementsByTagName(\'div\'); for(i=0; elms.length>i; i++){ if(elms[i].className == \'highlightsDescription\') { elms[i].style.display = set; } }
-- og en af de problemer, jeg har overskuet i mine senere udgaver er præcis den, som tidligere er vist med, at der kan være flere classNames i en class, hvorfor man må teste med .indexOf()>-1 !-)
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.