Avatar billede supermand69 Nybegynder
13. september 2005 - 21:22 Der er 24 kommentarer og
1 løsning

array af div's

Jeg har x antal <div> på en side som har id = tst[div]

eks.
<div id="tst[div]">test 1</div>
<div id="tst[div]" style="display:none">test 2</div>
<div id="tst[div]">test 3</div>

Jeg skal så have registreret alle mine <div> i en funktion, så dem der er synlige bliver sat til true og resten til false

eks.
tst_arr[div][0] = true;
tst_arr[div][1] = false;
tst_arr[div][2] = true;

Når jeg så trykker på en knap skal de synlige <div> blive skjult og omvendt med de skjulte..
Avatar billede roenving Novice
13. september 2005 - 21:29 #1
Du må ikke have flere elementer med samme id ...

-- der er heller ikke andre end dig selv, der har dit personnummer, så du skal finde på noget andet end at benytte id til at kæde sammen, eller også skal de f.eks. have numre, altså div0, div1 osv. ...

-- selv bruger jeg at benytte mig af class, som gerne må indeholde flere, f.eks. class="noget nogetAndet" !-)
Avatar billede roenving Novice
13. september 2005 - 21:30 #2
-- og hvorfra kommer synligheden, for medmindre den er sat i tagget, som du viser, eller er sat via javascript, kan man ikke aflæse det !o]
Avatar billede supermand69 Nybegynder
13. september 2005 - 21:35 #3
ok..

hvad nu hvis jeg forholdte mig til kun 2 div's og kaldte dem følgende?
tst[div][0] og tst[div][1]

hvordan kan jeg så smide dem ind i mit array?
Avatar billede supermand69 Nybegynder
13. september 2005 - 21:36 #4
- men jeg troede at elementer med samme id automatik blev sat i et array? [0], [1] osv
Avatar billede roenving Novice
13. september 2005 - 21:43 #5
-- nej det gælder kun for name-attributten, med id ignoreres andre end den første ...

-- og det spiller ingen trille, om der er to eller tusind, teknikken er præcis den samme !-)

F.eks.

var tst_arr = new Array();
var divs = document.getElementsByTagName("div");
for(i=0;divs.length>i;i++){
  if(divs[i].id.indexOf('ditDivId')==0){
    tst_arr[tst_arr.length] = [ divs[i], divs[i].style.display != 'none' ];
  }
}

<div id="ditDivId_0">test 1</div>
<div id="ditDivId_1" style="display:none">test 2</div>
<div id="ditDivId_2">test 3</div>

-- og arrayet vil så indeholde både referencen til divet og dets status (som godt nok kan undværes i de fleste tilfælde !-)
Avatar billede supermand69 Nybegynder
13. september 2005 - 22:00 #6
dvs. name og id faktisk virker ens, lige på nær at med id ignoreres andre end den første?
Avatar billede roenving Novice
13. september 2005 - 22:08 #7
Nah, name er faktisk kun til brug på form-elementer og deprecated for alle andre elementer (også f.eks. img-, form- og (i)frame-tags, hvor de simpelthen er ugyldige i xhtml !-)

-- men med navngivne elementer i en form, kan du hente dem med formObjekt.navn og få enten et enkelt element eller et array af elementer, hvis flere har samme navn ...

-- med id kan du hente elementerne med getElementById, som alene kan hente eet element, hvorfor alle andre forekomster end det første ignoreres !o]
Avatar billede supermand69 Nybegynder
13. september 2005 - 23:19 #8
hvordan kan jeg så hurtigt og nemt smide følgende i et array?

<div id="expand[tst1][div][0]">
<div id="expand[tst1][div][1]">
<div id="expand[tst1][div][2]">
Avatar billede roenving Novice
13. september 2005 - 23:27 #9
Hvorfor har du alle de brackets ?-)

-- men ellers er det bare at kaste det, som er fælles fra starten ind i ovenstående i stedet for ditDivId:

var tst_arr = new Array();
var divs = document.getElementsByTagName("div");
for(i=0;divs.length>i;i++){
  if(divs[i].id.indexOf('expand[tst1][div][')==0){
    tst_arr[tst_arr.length] = divs[i];
  }
}
Avatar billede supermand69 Nybegynder
14. september 2005 - 15:35 #10
fordi der er mange andre variabler som smides ind i expand[tst1]

hvordan kan jeg smide alle elementer med id expand[tst][div] i et array?
Avatar billede roenving Novice
14. september 2005 - 20:49 #11
-- jeg kan simpelthen ikke fatte konstruktionen, for selvom det måske er lovligt at bruge id'er sådan, giver det ikke for mig nogen mening at bruge et navn på en div, som kun er funktionelt i programmering ...

-- i stil med at du kalder din bil 'den første blå bil, som kom forbi Roskilde Domkirke d. 6/9-2005' eller døbe din søn 'drengen, som blev født, da jeg var 32 år, 3 måneder, 15 dage, 7 timer og 25 minutter gammel' ...

-- kan være identificeringen er rimelig unik, men det er da ikke navne eller lignende ...

-- iøvrigt er svaret på dit spørgsmål her til sidst: Sådan !-)

-- for du skal gøre det på den måde, jeg viste i min sidste kommentar !o]
Avatar billede supermand69 Nybegynder
14. september 2005 - 21:39 #12
ok, jeg troede bare at man kunne lave det hele i array at man så kunne undlade at lave en løkke for at hente alle elementerne :) men det kan man åbenbart ikke... hehe

så det kan godt være jeg gør som du skrev før.. ;)

jeg ser lige på det om vender tilbage imorgen
Avatar billede supermand69 Nybegynder
14. september 2005 - 22:09 #13
har lige et lille spørgsmål mere?

hvordan kan man ændre src til noget andet i et img tag - og derefter gå tilbage til det oprindelige?
Avatar billede roenving Novice
14. september 2005 - 22:30 #14
Tjah, jeg kan forestille mig denne lidt krøllede løsning:

<img src="../billede.jpg" style="width:100px;height:100px;" onclick="if(!this.defaultSrc){this.defaultSrc=this.src;};this.src=this.defaultSrc==this.src?'../eksperten_logo_new.gif':this.defaultSrc;">

-- og du skal selvfølgelig udskifte billederne !-)
Avatar billede supermand69 Nybegynder
14. september 2005 - 22:34 #15
hehe...

den der løsning er lidt for krøllet som du selv siger :)

jeg har lige siddet og forsøgt mig lidt..

http://clark.avansis.dk/test/expand/

det eneste som ikke virker er at mine div's ikke ændrer fra block til none i display :s
Avatar billede roenving Novice
14. september 2005 - 22:52 #16
Tjah, måske skal du have den som en funktion:

<img src="gfx/button.expand.png" onclick="clickImg(this);">

function clickImg(pic){
  if(!pic.defaultSrc)
    pic.defaultSrc=pic.src;
  pic.src=pic.defaultSrc==pic.src?'gfx/button.expand.png':this.defaultSrc;
}

-- men default-tingen er selvfølgelig ikke nødvendig, hvis det kun skal fungere med det samme billede på mange elementer !-)
Avatar billede supermand69 Nybegynder
14. september 2005 - 22:56 #17
det skal ske på mange billeder så jeg tror bare jeg beholder den som jeg har den nu :)

men kan du se hvad der går galt i min funktion? mine div's ændrer sig ikke når man trykker på knappen
Avatar billede roenving Novice
14. september 2005 - 23:09 #18
Du bruger et par lighedstegn for meget !-)

  if(divs[i].style.display != 'none')
    divs[i].style.display = 'none';
  else
    divs[i].style.display = 'block';
Avatar billede supermand69 Nybegynder
14. september 2005 - 23:18 #19
dooh :)

hvor mange indstillinger har display?

lav lige et svar
Avatar billede supermand69 Nybegynder
14. september 2005 - 23:26 #20
hvordan kan det være man skal have == 0 med her?

if(divs[i].id.indexOf('expand['+id+'_div') == 0)
Avatar billede roenving Novice
14. september 2005 - 23:34 #21
I javascript er der forskel på lighedsoperatoren == og tildelingsoperatoren =

Karl == Søren betyder at Karl og Søren har samme betydning/værdi/er det samme objekt ...

Karl = Søren betyder, at herefter er Karl det samme som Søren !-)

-- og display har en multi-mega-stor hoben muligheder, kig f.eks. her: http://blooberry.com/indexdot/css/properties/classify/display.htm, men bemærk kompatibilitets-angivelserne, det er ikke så mange, som understøttes af IE !o]

-- els velbekomme '-)
Avatar billede supermand69 Nybegynder
14. september 2005 - 23:38 #22
tak :)
Avatar billede roenving Novice
14. september 2005 - 23:39 #23
-- og jeg takker for point ;~}
Avatar billede supermand69 Nybegynder
14. september 2005 - 23:51 #24
- men hvorfor skal man have == 0 med her?

if(divs[i].id.indexOf('expand['+id+'_div') == 0)

jeg kan ikke helt se hvad det gør? :) men hvis jeg fjerner == 0 fucker det op ;)
Avatar billede roenving Novice
15. september 2005 - 00:00 #25
Det betyder i den sammenhæng:

-- hvis id starter med 'expand[tst1_div' skal du noget

indexOf returnerer nemlig placeringen af den tekst der står som parameter til tekststrengen ...

var x = "Min tekst-streng";

var eksA = x.indexOf('Min');//returnerer 0, for det er starten

var eksB = x.indexOf('in');//returnerer 1, for man skal flytte sig en karakter ind for at finde den ...

var eksC = x.indexOf('teks');//returnerer 4, for t'et står på den 5. plads i teksten !-)

-- så derfor skal du teste om starten på id'et er lig med teksten, altså står på index 0 !o]
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