Avatar billede powernodes Nybegynder
18. maj 2004 - 15:34 Der er 17 kommentarer og
1 løsning

parentNode problem

Case: Jeg har et "a" tag inde i et "li" tag. Dette finder jeg ved hjælp af et className og en "for" løkke.
Så lang så godt.

Jeg vil så op og finde alle foran liggende "ul" - parent om man vil.

Det har jeg nogle problemer med.

Jeg har so far flg., som rigtigt nok finder førstkommende "ul" ovenfor til mig:

p = aItems[j].parentNode;
while (isTrue = (aItems[j].className == "PE_locationmark") ? true : false) { // isTrue bruger jeg blot til at alert'e med
  p.parentNode.style.display = "block";
  break; // break findes kun for at forhindre en crash
}

Problemet kommer så når jeg skal videre op, samt derefter fjerne min "break".

Jeg har forsøgt med:

while (isTrue = (aItems[j].className == "PE_locationmark") ? true : false) {
  p.parentNode.style.display = "block";
  p = p.parentNode;
}

men det fungerer tilsynladende ikke.

Anyone?
Avatar billede roenving Novice
18. maj 2004 - 15:46 #1
Hvad med at:

if(isTrue = (aItems[j].className == "PE_locationmark")) {//?true:false er overflødigt !-)
  p = p.parentNode;
  p.style.display = "block";
  while(p.previousSibling){
    p = p.previousSibling;
    if(p.tagName=="UL")p.style.display='block';
  }
}
Avatar billede roenving Novice
18. maj 2004 - 15:47 #2
Hov der skulle jo et lag mere:

if(isTrue = (aItems[j].className == "PE_locationmark")) {//?true:false er overflødigt !-)
  p = p.parentNode;
  p.style.display = "block";
  p = p.parentNode;
  p.style.display = "block";
  while(p.previousSibling){
    p = p.previousSibling;
    if(p.tagName=="UL")p.style.display='block';
  }
}
Avatar billede powernodes Nybegynder
18. maj 2004 - 15:55 #3
Narjj, jeg får stadigvæk fat i førstkommende UL ovenfor, men herefter smider den style på et LI tag, og ikke de resterende UL's.

Men jeg leger lidt videre med det, og kommer tilbage igen hvis det stadig ikke vil :)

(hilsen pelkjaer)
Avatar billede roenving Novice
18. maj 2004 - 16:22 #4
Jamen hej Peter !-)

Giver sibling ikke dine ULs ?-)

-- og det burde vel være rigeligt at checke for tagname ...

-- eller har du det som et hierarki, hvor der ideligt skal søges højere op, for så kunne det være, at du skulle tænke din while til at tage to skridt ad gangen, sådan noget à la det, jeg har i 15:47:13 !o]
Avatar billede powernodes Nybegynder
18. maj 2004 - 18:24 #5
YO

p = aItems[j].parentNode;
if (isTrue = (aItems[j].className == "PE_locationmark")) {
  while (p) {
    if (p.tagName == "UL")
    p.style.display = "block";
    p = p.parentNode;
  }
}

Så virker det endelig. Smid et svar så jeg kan bruge nogle af mine nye 300P *rofl*
Avatar billede powernodes Nybegynder
18. maj 2004 - 18:25 #6
Har dog lige et sp. - noget jeg aldrig har forstået.

Flg.

if (p.tagName == "UL")
    p.style.display = "block";
    p = p.parentNode;


Smider jeg tuborg klammer i if'en, crasher min while - how come?
Avatar billede roenving Novice
18. maj 2004 - 22:13 #7
Som du skriver det der, virker if-sætningen kun på den første linje, den anden vil altid blive udført ...

Crasher ?-)

Hvis du bruger det korrekt, burde du kunne neste nærmest uendeligt ...

p = aItems[j].parentNode;
if (isTrue = (aItems[j].className == "PE_locationmark")) {
  while (p) {
    if (p.tagName == "UL"){
      p.style.display = "block";
    }
    p = p.parentNode;
  }
}

-- burde udføre præcis det samme ...

-- og velbekomme '-)

(Hvorfor har du da ikke 'bare' skiftet nick ?-)
Avatar billede powernodes Nybegynder
19. maj 2004 - 09:18 #8
Jeg har ikke "bare" skiftet nick, fordi jeg ikke var klar over at man kunne - det er jeg siden hen blevet, men da er det lidt sent, da det brugernavn jeg ville ha, jo nu er optaget af denne nye konto.. :o( Sur røv, but shit happens.

Og med hensyn til koden, ja det burde da give det samme?
Avatar billede roenving Novice
19. maj 2004 - 13:08 #9
-- tjah, det er ikke altid man har 'rettidig omhu' !-)

-- og tak for point ;~}
Avatar billede powernodes Nybegynder
19. maj 2004 - 13:41 #10
Det er jo det.

Jeg har et sidste (ret irriterende) problem, som jeg dog ikke ved om du kan hjælpe med.

At klasseskift (css) generelt er noget hø, ved jeg godt. Ikke desto mindre har jeg gjort flittigt brug af det her, da jeg gerne ville layoute min app. 100% med css. Som sagt så gjort.

Når jeg mouseover' i mit træ, blinker mine bg billeder noget så forfærdeligt, selvom jeg ikke har nogle js events whatsoever på mouseover, og i min css hover, har jeg blot farveskift. Ikke noget med billedeskift.
Er det noget du har stødt på før? :)
Avatar billede roenving Novice
19. maj 2004 - 14:11 #11
Nej, men jeg ville heller ikke drømme om at lave klasse-skift on-the-fly, så jeg har set det ved situationer, hvor et nyt billede har skullet bruges på et element ...

-- og den situation stå du faktisk også i, når du laver eet klasseskift, da browseren så bogstavelig talt smider hele det renderede layout ud, og starter forfra på at beregne sidens udseende !-)

Så vil billeder, du har lagt ind via css altså blive opfattet som 'nye' billeder ...

-- og så har jeg svært ved at forstå dit udsagn om, at du 'gerne ville layoute min app. 100% med css' ?-)

Hvad har det med klasseskift at gøre ?o]

Du kan jo også finde metoder via javascript, som kan læse stylesheetet og lægge de properties på, som findes i de enkelte styles, f.eks. vha. cssRules/cssText/rules ...
Avatar billede powernodes Nybegynder
19. maj 2004 - 14:22 #12
Jeg forstår ærligt talt ikke hvad du mener.
Én ting er at der re-renderes når der åbnes/lukkes en node (og der dermed sker klasseskift) - det kan jeg sagtens leve med.

Hvad jeg ikke forstår, er at hvis træet fx. er foldet helt ud, og jeg så blot bevæger musen hen over det, så blinker mine background-images. Der sker ikke noget klasseskift, så lige _det_ problem kan jeg ikke se det logiske i.

Mht. til css layout - det er en længere historie, men kort sagt skal træet kunne vises i designview i Dreamweaver, i udfoldet tilstand.
Avatar billede powernodes Nybegynder
19. maj 2004 - 14:26 #13
Og jeg kunne ret beset også komme uden om mine classes - fx. med cssText som du selv foreslår. En klasse er dog lettere for folk at style, og min "ikke-forståelse" for problemet er stadig en hindring :o)
Avatar billede roenving Novice
19. maj 2004 - 15:29 #14
En tilgang kunne være en generisk ting, såsom:

function getStyle(selText){
  for(i=0;document.styleSheets.length>i;i++){
    sh = document.styleSheets[i];
    for(j=0;sh.rules.length>j;j++){
      if(sh.rules[j].selectorText.indexOf(selText)>-1))return sh.rules[j];
    }
  }
}

-- som vil returnere det style-objekt, som svarer til en bestemt selector (som du skriver dem i stylesheetet (.class, #id, body, a:hover osv.)

-- ganske utestet, men det var også mere ideen, jeg ville komme med !-)
Avatar billede roenving Novice
19. maj 2004 - 15:30 #15
-- og det fremgå vist tydeligt, at det ikke er testet, bl.a. en dobbelt )) ...
Avatar billede powernodes Nybegynder
19. maj 2004 - 15:35 #16
En god idé som jeg vil prøve :)

En anden er (selvom det så ikke er css mere)

var PE_plusmarkStyles = {
  "backgroundImage": "url(images/iconExpand.gif)",
  "backgroundRepeat": "no-repeat",
  "backgroundPosition": "0px 50%",
  "padding": "0 0 0 18px !important",
  "cursor": "hand"
};

for (x in PE_plusmarkStyles) {
  aTrees[i].parentNode.firstChild.style[x] = PE_plusmarkStyles[x];
}
Avatar billede roenving Novice
19. maj 2004 - 15:46 #17
Ja, og du kan bruge den samme type function ud fra det style-objekt, du får fra getStyle() !-)
Avatar billede powernodes Nybegynder
19. maj 2004 - 15:54 #18
Nemlig :)

Jeg sætter en side op med begge metoder, og ser om det hjælper (markant!).
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