26. februar 2008 - 19:55Der er
11 kommentarer og 2 løsninger
DOM: lastChild eller getElementsByTagName
Hej eksperter
Jeg må indrømme, at min erfaring med at tilgå HTML DOM via ECMA script er ikke-eksisterende. Derfor vil jeg gerne høre, _hvilken løsning, der er mest korrekt / virker på de ældste browsere_?
Min situation er, at jeg har noget kode, der ser omtrent således ud (en menu, hvor under-punkter først skal vises ved mouseover):
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
Som du kan se, tolker de to browsere whitespace forskelligt. FF ser det sidste linjeskift i UL-blokken som ul-elementets lastChild - mens IE mener, det sidste li-element er ul-elementets lastChild :o|
Den sikre fremgangsmåde er at skrive noget i stil med:
function foo() { var oUL = document.getElementById("gnu"); var aLI = oUL.getElementsByTagName("li"); alert( aLI[aLI.length-1].nodeName ); }
Når man itererer gennem en childNodes-collection - eller bruger next-/previousSibling - eller bruger first-/lastChild - så risikerer du problemer med whitespace i bl.a. Firefox.
Derfor kan der være gode grunde til at bruge din #2, men specielt når der er tale om dynamisk indsatte elementer - eller elementer, udskrevet på én linje med henblik på DOM-manipulation - kan man ofte med fordel bruge de andre ;o)
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.