Avatar billede jesper-moeller Nybegynder
25. september 2006 - 16:56 Der er 29 kommentarer og
2 løsninger

Lille ElementById funktion

denne lille funktion funktio skal lukke alle ElementById undtagen den valgte ud af 5
De heder alle pr0,pr1,,,,pr4
Ser dette rigtigt ud ???

function toggle_it(itemID){
    prnum = itemID.split("pr")
    for(i = 0;i<4;i++){
    if (i!=prnum){
    document.getElementById("pr"+i).style.display = 'none';
}}}
Avatar billede coderdk Praktikant
25. september 2006 - 17:32 #1
hvis det er inkl. 4 så skal det være i<=4
Avatar billede mclemens Nybegynder
25. september 2006 - 18:24 #2
Og hvis du splitter f.eks.:
"pr4" med split "pr" skal denne linje rettes
fra: if (i!=prnum){
til: if (i!=prnum[1]){

... Og som coderdk siger skal i betingelsen i formen
øges en tand - Et eksempel på din kode ser sådan her ud:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="content-type" content="text/html; charset=iso-8859-1"><title>Ingen titel</title>

<script type="text/javascript">
function toggle_it(itemID){
    prnum = itemID.split("pr")
    for(i = 0;i<5;i++){
    if (i!=prnum[1]){
    document.getElementById("pr"+i).style.display = 'none';
}}}
</script>

</head><body>

<b onclick="toggle_it('pr0');">0</b><br>
<b onclick="toggle_it('pr1');">1</b><br>
<b onclick="toggle_it('pr2');">2</b><br>
<b onclick="toggle_it('pr3');">3</b><br>
<b onclick="toggle_it('pr4');">4</b><br>

<br><br><br>

<div id="pr0">0</div>
<div id="pr1">1</div>
<div id="pr2">2</div>
<div id="pr3">3</div>
<div id="pr4">4</div>
</body></html>





- Hvis den så skal vise/skjule afhængig af
knappen kan du bruge dette script istedet:
(ellers forsvinder tingene lidt hurtigt...)


<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="content-type" content="text/html; charset=iso-8859-1"><title>Ingen titel</title>

<script type="text/javascript">
function toggle_it(itemID){
  prnum = itemID.split("pr")
  for(i = 0;i<5;i++){
    document.getElementById("pr"+i).style.display =(i!=prnum[1])?'none':'block';
  }
}
</script>

</head><body>

<b onclick="toggle_it('pr0');">0</b><br>
<b onclick="toggle_it('pr1');">1</b><br>
<b onclick="toggle_it('pr2');">2</b><br>
<b onclick="toggle_it('pr3');">3</b><br>
<b onclick="toggle_it('pr4');">4</b><br>

<br><br><br>

<div id="pr0">0</div>
<div id="pr1" style="display:none;">1</div>
<div id="pr2" style="display:none;">2</div>
<div id="pr3" style="display:none;">3</div>
<div id="pr4" style="display:none;">4</div>
</body></html>





- jeg ville vælge denne her:


<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="content-type" content="text/html; charset=iso-8859-1"><title>Ingen titel</title>

<script type="text/javascript">
function toggle_it(prnum){
  for(i = 0;i<5;i++){
    document.getElementById("pr"+i).style.display =(i!=prnum)?'none':'block';
  }
}
</script>

</head><body>

<b onclick="toggle_it('0');">0</b><br>
<b onclick="toggle_it('1');">1</b><br>
<b onclick="toggle_it('2');">2</b><br>
<b onclick="toggle_it('3');">3</b><br>
<b onclick="toggle_it('4');">4</b><br>

<br><br><br>

<div id="pr0">0</div>
<div id="pr1" style="display:none;">1</div>
<div id="pr2" style="display:none;">2</div>
<div id="pr3" style="display:none;">3</div>
<div id="pr4" style="display:none;">4</div>
</body></html>


- eller denne afhængig af behovet:


<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="content-type" content="text/html; charset=iso-8859-1"><title>Ingen titel</title>

<script type="text/javascript">
var prev="pr0";
function toggle_it(prnum){
  document.getElementById(prev).style.display='none';
  prev=prnum;
  document.getElementById(prnum).style.display='block';
}
</script>

</head><body>

<b onclick="toggle_it('pr0');">0</b><br>
<b onclick="toggle_it('pr1');">1</b><br>
<b onclick="toggle_it('pr2');">2</b><br>
<b onclick="toggle_it('pr3');">3</b><br>
<b onclick="toggle_it('pr4');">4</b><br>

<br><br><br>

<div id="pr0">0</div>
<div id="pr1" style="display:none;">1</div>
<div id="pr2" style="display:none;">2</div>
<div id="pr3" style="display:none;">3</div>
<div id="pr4" style="display:none;">4</div>
</body></html>
Avatar billede mclemens Nybegynder
25. september 2006 - 18:24 #3
Kast et svar Coderdk :)
Avatar billede coderdk Praktikant
25. september 2006 - 20:17 #4
hehe :-D
Avatar billede jesper-moeller Nybegynder
25. september 2006 - 20:17 #5
Som sædvanligt et yderst udybende svar fra mclemens

Jeg har indtil nu fået rodet mig ud i følgende
function toggle_it(itemID){
if ((document.getElementById(itemID).style.display == 'none')){
document.getElementById(itemID).style.display = 'inline';
}
prnum = itemID.split("pr")
for(i = 0;i<4;i++){
if (i!=prnum){
prfelt = "pr"+i
document.getElementById[prfelt].style.display = 'none';
}}}

Du skriver
"pr4" med split "pr" skal denne linje rettes
fra: if (i!=prnum){
til: if (i!=prnum[1]){

hvorfor [1] ?? prnum = itemID.split("pr")  give da resultatet 0 til 4 (afhængit af vilken itemID)

Kan godt lide din
for(i = 0;i<5;i++){
    document.getElementById("pr"+i).style.display =(i!=prnum)?'none':'block';
;-)
Avatar billede jesper-moeller Nybegynder
25. september 2006 - 20:28 #6
selvom jeg godt kan lide
function toggle_it(prnum){
  for(i = 0;i<5;i++){
    document.getElementById("pr"+i).style.display =(i!=prnum)?'none':'block';
  }
}
betyder det jo ikke jeg helt fatter den ;-)

(i!=prnum) vil da alti være forskellig fra i da prnum jo er pr0 til pr4 ?
Avatar billede jesper-moeller Nybegynder
25. september 2006 - 20:29 #7
Ps .. håber point fordelingen er rimlig
Avatar billede coderdk Praktikant
25. september 2006 - 20:35 #8
Mere end :)
Avatar billede mclemens Nybegynder
25. september 2006 - 20:35 #9
20:28:56 - husk at kigge på onclicks fra eksemplet ;)
... hvis pr4 bruges kan det så se ud som her istedet:
function toggle_it(prnum){
  for(i = 0;i<5;i++){
    document.getElementById("pr"+i).style.display=(i!=prnum.substr(2))?'none':'block';
  }
}



25/09-2006 20:17:06 [ hvorfor [1] ?? prnum = itemID.split("pr")  give da resultatet 0 til 4 (afhængit af vilken itemID) ]

Hvis vi tager udgangspunkt i dette script:

<script type="text/javascript">
  itemID="pr4";
  prnum = itemID.split("pr");
  alert("'"+prnum+"'");
</script>

Så får jeg i IE og FF (pc) returneret ,4 ... altså et array
hvor pr er brugt til at splitte tekststrengen pr4 med ...
så [0] indeholder ingenting og [1] indeholder det efter pr

- et alternativ kunne være at bruge substr til at fjerne de to
første tegn som ved eksemplet jeg rettede i toppen af dette indlæg.
Men, hvis der måske står gjsgjkkpr9 i en og pr1 skal man jo splitte :)
(eller lege med indexOf m.v.)
Avatar billede mclemens Nybegynder
25. september 2006 - 20:35 #10
Tak for point :)
Avatar billede mclemens Nybegynder
25. september 2006 - 20:37 #11
edit:[20:28:56 - husk at kigge på onclicks fra eksemplet ;)]
- og de onclicks jeg lavede virkede så lettere fjollede :D

<b onclick="toggle_it(4);">4</b><br>
kunne jo ligeså godt have været:
<b onclick="toggle_it(4);">4</b><br>
Avatar billede jesper-moeller Nybegynder
25. september 2006 - 20:42 #12
*G*  husk at kigge på onclicks fra eksemplet  ... skal jeg nu også LÆSE ?? ...*GGG*
Tak for forklaringen

function toggle_it(itemID){
    if ((document.getElementById(itemID).style.display == 'none')){
    document.getElementById(itemID).style.display = 'inline':'block';
    }
    prnum = itemID.split("pr")
    for(i = 0;i<=4;i++){
    document.getElementById("pr"+i).style.display=(i!=prnum)?'none':'block';
}}
må jo så være løsningen
Avatar billede mclemens Nybegynder
25. september 2006 - 20:42 #13
edit: 20:37:35 - hmmm, jeg havde skrevet toggle_it('4') i
den ene onclick... det var jo godt nok med toggle_it(4) ...
(lidt for meget copy'n'paste :D )
Avatar billede jesper-moeller Nybegynder
25. september 2006 - 20:44 #14
Bare for at misbruge din viden

kan
if ((document.getElementById(itemID).style.display == 'none')){
    document.getElementById(itemID).style.display = 'inline':'block';
    }

så ikke rettes til
if ((document.getElementById(itemID).style.display == 'none')?'inline':'block';

?? eller er jeg helt gal på den
Avatar billede coderdk Praktikant
25. september 2006 - 20:50 #15
Nej ikke helt, men næsten... Måske mener du:

document.getElementById(itemID).style.display = ( document.getElementById(itemID).style.display == 'none' ? 'inline' : 'block' );
Avatar billede mclemens Nybegynder
25. september 2006 - 20:50 #16
Jesper, 25/09-2006 20:42:07 virker ikke hos mig, jeg tester lige.
M.h.t. 20:44:54 så vil den ikke lade sig gøre, men man kan sige:

s=document.getElementById(itemID).style;
s.display=(s.display == 'none')?'inline':'block';
Avatar billede mclemens Nybegynder
25. september 2006 - 20:52 #17
Coderdk, vi er nu gode til det crosspostning :D
Avatar billede coderdk Praktikant
25. september 2006 - 20:55 #18
heheh det må man sige ;)
Vil den virke mclemens? Bør det ikke være:

s=document.getElementById(itemID);
s.style.display=(s.style.display == 'none')?'inline':'block';

Eller? Anyway, pænere end min ;P
Avatar billede mclemens Nybegynder
25. september 2006 - 20:56 #19
Jesper med rettelsen og den med prnum[1] virker den hos mig...


<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="content-type" content="text/html; charset=iso-8859-1"><title>Ingen titel</title>

<script type="text/javascript">
function toggle_it(itemID){

  s=document.getElementById(itemID).style;
  s.display=(s.display == 'none')?'inline':'block';

  prnum = itemID.split("pr")
  for(i = 0;i<=4;i++){
    document.getElementById("pr"+i).style.display=(i!=prnum[1])?'none':'block';
  }
}
</script>

</head><body>

<b onclick="toggle_it('pr0');">0</b><br>
<b onclick="toggle_it('pr1');">1</b><br>
<b onclick="toggle_it('pr2');">2</b><br>
<b onclick="toggle_it('pr3');">3</b><br>
<b onclick="toggle_it('pr4');">4</b><br>

<br><br><br>

<div id="pr0" style="background:red;">0</div>
<div id="pr1" style="display:none;background:red;">1</div>
<div id="pr2" style="display:none;background:red;">2</div>
<div id="pr3" style="display:none;background:red;">3</div>
<div id="pr4" style="display:none;background:red;">4</div>
</body></html>


...


...

Dog fanger jeg ikke lige den med none / inline da den
bliver sat til block længere nede alligevel eller ?
Avatar billede jesper-moeller Nybegynder
25. september 2006 - 21:02 #20
*S* ...
coderdk
Ja ... funktionen skal åbne en og lukke resten

vil dette så ikke gøre det ?? hvis jeg bruge feks onclick="toggle_it(4);">4<

function toggle_it(itemID){
    for(i = 0;i<=4;i++){
    document.getElementById("pr"+i).style.display=(i!=prnum)?'none':'block';
    document.getElementById("pr"+i).style.display=(i==prnum)?'inline':'block';
}}
Avatar billede mclemens Nybegynder
25. september 2006 - 21:04 #21
[ Vil den virke mclemens? Bør det ikke være:
s=document.getElementById(itemID);
s.style.display=(s.style.display == 'none')?'inline':'block'; ]

Du kan godt gå op til referencen style, men du kan ikke gå op til display
- for så får du værdien af display og vil ikke kunne tildele resultatet
det til elementets style.

Så, den virker - men det er jo også rart at man måske har lettere ved at
overskue ved s repræsenterer og på det punkt er det så ikke kun et spørgsmål
om at spare et par få tegn, men også at skrive koden der er lettest overskuelig.
I tilfældet hvor man nøjes med en reference til elementet (som du viser)
har man jo den reference til senere brug i scriptet hvis det er ... :)
Avatar billede jesper-moeller Nybegynder
25. september 2006 - 21:04 #22
Tju hej hvor det går ...*G*
Poster et og der er svar på et andet...*G*

Takker clemens
Avatar billede jesper-moeller Nybegynder
25. september 2006 - 21:13 #23
kig lige forbi http://www.eksperten.dk/spm/734597 begge to
Avatar billede mclemens Nybegynder
25. september 2006 - 21:13 #24
Velbekom, m.h.t. 25/09-2006 21:02:17 minder den
kodningen lidt om et slutresultat i denne stil
- med switchning mellem inline og block elementer ...


<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="content-type" content="text/html; charset=iso-8859-1"><title>Ingen titel</title>

<script type="text/javascript">

function toggle_it(itemID){

  prnum = itemID.split("pr");

    for(i = 0;i<=4;i++){
    s=document.getElementById("pr"+i).style;
    s.display=(i!=prnum[1])?'none':'block';
    s.display=(i==prnum[1])?'inline':'block';
}}

</script>

</head><body>

<b onclick="toggle_it('pr0');">0</b><br>
<b onclick="toggle_it('pr1');">1</b><br>
<b onclick="toggle_it('pr2');">2</b><br>
<b onclick="toggle_it('pr3');">3</b><br>
<b onclick="toggle_it('pr4');">4</b><br>

<br><br><br>

<div id="pr0" style="display:inline;background:red;">0</div>
<div id="pr1" style="background:red;">1</div>
<div id="pr2" style="background:red;">2</div>
<div id="pr3" style="background:red;">3</div>
<div id="pr4" style="background:red;">4</div>
</body></html>
Avatar billede jesper-moeller Nybegynder
25. september 2006 - 21:22 #25
Ok ... så både

for(i = 0;i<=4;i++){
    s=document.getElementById("pr"+i).style;
    s.display=(i!=prnum[1])?'none':'block';
    s.display=(i==prnum[1])?'inline':'block';

og

for(i = 0;i<=4;i++){
    document.getElementById("pr"+i).style.display=(i!=prnum)?'none':'block';
    document.getElementById("pr"+i).style.display=(i==prnum)?'inline':'block';

???

og hvis jeg bruger feks
onclick="toggle_it('0'); istedet for onclick="toggle_it('pr0');
kan split("pr"); undværes ?

Tror sørme jeg er ved at fatte det...*G*
Avatar billede mclemens Nybegynder
25. september 2006 - 21:23 #26
Og via. sidste eksempel i 25/09-2006 18:24:29 med global variabel
til tidligere element ville ovenstående script se sådan her ud:

<script type="text/javascript">
var prev="pr0";

function toggle_it(itemID){
  document.getElementById(prev).style.display='block';
  prev=itemID;
  document.getElementById(prev).style.display='inline';
}
</script>
Avatar billede mclemens Nybegynder
25. september 2006 - 21:23 #27
Kommer lige med en til 21:22:29...
Avatar billede mclemens Nybegynder
25. september 2006 - 21:27 #28
Ja, det var ikke begge dele, men istedet for ...
- de virker begge to, hvis du laver kald uden "pr" foran tallet


function toggle_it(itemID){
    for(i = 0;i<=4;i++){
    s=document.getElementById("pr"+i).style;
    s.display=(i!=prnum)?'none':'block';
    s.display=(i==prnum)?'inline':'block';
}}


eller

function toggle_it(itemID){
for(i = 0;i<=4;i++){
    document.getElementById("pr"+i).style.display=(i!=prnum)?'none':'block';
    document.getElementById("pr"+i).style.display=(i==prnum)?'inline':'block';
}}


og så onclick="toggle_it('0');"
(' - er bar en fejl fra min side,
de er jo unødvendige ved tal :) )
Avatar billede mclemens Nybegynder
25. september 2006 - 21:37 #29
^ - hmmm, jeg er vist ikke helt vågen i de to
ovenstående skulle prnum lige erstattes af itemID
- jvf. function toggle_it(itemID){ (det med prnum
var jo til da vi splittede og brugte prnum ...)
Avatar billede jesper-moeller Nybegynder
25. september 2006 - 21:40 #30
Oki doki ... takker igen igen
(og husker at ændre prnum til itemID (eller omvendt)
:-)
Avatar billede jesper-moeller Nybegynder
26. september 2006 - 01:15 #31
mclemens

hvis du har tid og lyst så:
http://www.eksperten.dk/spm/734643

Scriptet driller
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