Avatar billede emkay Nybegynder
25. juli 2007 - 12:03 Der er 9 kommentarer og
1 løsning

Problem med parentNode / parentElement

Hey.. Jeg har følgende:

<li class="lukket" id="parentmenu2" runat="server"><a href="java script:togglemenu2(this);">Hovedmenu1</a>
<ul id="submenu2">
<li><a href="/">Undermenu1</a></li>
<li><a href="/">Undermenu2</a></li>
<li><a href="/">Undermenu3</a></li>
</ul>
</li>



function togglemenu2(objLink) {
var objParentmenu = objLink.parentElement;
objParentmenu.className = 'aaben';
}




Det virker bare ikke. FF rapporterer at "objParentmenu has no properties".

Har prøvet både med parentElement og parentNode.
Hvad gør jeg galt?
Avatar billede olebole Juniormester
25. juli 2007 - 12:41 #1
<ole>

Det er parentNode, du skal bruge ... og det virker  ;o)

Til gengæld er skift af CSS-klasse noget af det mest elendigt performende, du kan foretage dig. Skift i stedet de enkelte style-properties på elementet

/mvh
</bole>
Avatar billede Slettet bruger
25. juli 2007 - 12:43 #2
this refererer ikke til anchor elementet men til window.
Prøv en onclick handler i stedet:

[code]
<a href="" onclick="togglemenu2(this); return false;">Hovedmenu1</a>
[/code]

[code]
function togglemenu2(objLink) {
  var objParentmenu = objLink.parentNode;
  objParentmenu.className = 'aaben';
}
[/code]
Avatar billede emkay Nybegynder
25. juli 2007 - 12:59 #3
>> olebole
Hmm.. Ok. Det vil jeg tage med i overvejelserne. Tak for tippet. Men det virker nu altså ikke som det var.

>> jjust
Til gengæld virker det, hvis jeg gør som du skriver. Mange tak :P
Smid et svar :)
Avatar billede Slettet bruger
25. juli 2007 - 13:07 #4
Kommer her.
Avatar billede thesurfer Nybegynder
25. juli 2007 - 13:08 #5
..hvilket var nøjagtigt det olebole skrev du skulle gøre.. :-)
Avatar billede Slettet bruger
25. juli 2007 - 13:11 #6
thesurfer> I olebole's svar vil "this" så vidt jeg kan se stadig refererer til Window og ikke ankeret.

olebole> Har du set denne test: http://www.quirksmode.org/blog/archives/2005/07/benchmark_tests.html

Det er min erfaring at fyren dér har rimeligt godt styr på tingene...
Avatar billede thesurfer Nybegynder
25. juli 2007 - 13:16 #7
jjust>
1) Så vidt jeg kan se, er den eneste forskel på spørgerens kode, og din kode, at du har ændret "parentElement" til "parentNode", som olebole foreslog.

2) Din "this" og spørgerens (som du kalder oleboles) this, er den samme "this"

Korrekt?
Avatar billede Slettet bruger
25. juli 2007 - 13:18 #8
thesurfer> Nej, det mener jeg ikke er korrekt. Når du benytter href="java script:togglemenu2(this)" vil "this" pege på Window. Når du benytter onclick="togglemenu2(this)" vil "this" pege på anker elementet. En væsenlig forskel når du skal kalde parentNode. Window har ingen parentNode...
Avatar billede thesurfer Nybegynder
25. juli 2007 - 13:21 #9
Ahh, ja.. (lavede lige en test)
Avatar billede olebole Juniormester
26. juli 2007 - 13:19 #10
jjust >> Ja, den har jeg set - og roenving og jeg har da også pillet netop dén artikel fra hinanden med realistiske eksempler, der tager op til sekunder for at gennemføre handlingen. Hans eksempler er ikke videre realistiske - men skræddersyet til 'beviset'.

"Det er min erfaring at fyren dér har rimeligt godt styr på tingene..." >> Ja, men absolut heller ikke mere. Vi er før stødt ind i alvorlige fejl og mangler på hans sider.

MS har ganske godt styr på egne produkters mangler:
    http://msdn2.microsoft.com/en-us/library/ms533019.aspx

- læs sprecielt under "Avoid switching classes and style rules".

- og så er det hele jo i øvrigt indlysende sund logik. Naturligvis er browseren nødt til at genberegne hele dokumentet, da den umuligt kan overskue, hvad et klasseskift kan have af indvirkning på alle de tusinder af elementer, CSS- og element-klasser, der evt. måtte arve fra den pågældende klasse. Det er nogle ekstremt indviklede beregninger  ;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