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):
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.