Toon posts:

[js][dom] object voor object identificeren

Pagina: 1
Acties:
  • 172 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Hoi,

Ik zit weer met een probleem, en de oplossing die ik er zelf voor heb gevonden lijkt me niet echt ideaal. Ik heb een menustructuur zoals deze:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<ul>

<li>
  <a href="?p=1">Home</a><span><a>Omhoog</a></span>
</li>

<li>
  <a href="?p=2">Pagina</a><span><a>Omhoog</a></span>
    <ul>
       <li><a href="?p=1">Subpagina 1</a><span><a>Omhoog</a></span></li>
       <li><a href="?p=2">Subpgina 2</a><span><a>Omhoog</a></span></li>
    </ul>
</li>

</ul>

Nu wil ik wanneer er op 'Omhoog' wordt geklikt bij bijvoorbeeld Pagina, dat dat item omhoog gaat in de lijst, dus dat het wordt omgeruild met het item 'Home' daarboven. Maar hoe identificeer ik het item erboven?

Mijn idee was om een getElementsByTagName te gebruiken, tot dat deze het object heeft gevonden waar ik naar zoek, en dan 1 lager te gaan. Maar dit gaat natuurlijk fout als er meerdere links zijn naar dezelfde pagina in het menu.

Is er een betere methode om een object voor een object te identificeren?

  • Cyphax
  • Registratie: November 2000
  • Laatst online: 14:10

Cyphax

Moderator LNX
Volgens mij zijn dat siblings van elkaar... zou dat kunnen? In dat geval kun je met nextSibling en previousSibling misschien je probleem oplossen.
Ik heb er even wat over opgezocht en deze pagina lijkt me wel interessant:
http://www.scit.wlv.ac.uk/~jphb/javascript/dom2.html

Saved by the buoyancy of citrus


Verwijderd

Topicstarter
yep, dat is het bedankt!

Overigens is het raar dat Internet Explorer als previousSibling van een LI een LI heeft, en dat Firefox en Safari als previousSibling een textNode hebben..

Zo maar opgelost:
code:
1
2
var theTarget = theSource.previousSibling; // IE
if (theTarget.nodeType == 3) theTarget = theTarget.previousSibling; // others

  • Cyphax
  • Registratie: November 2000
  • Laatst online: 14:10

Cyphax

Moderator LNX
Verwijderd schreef op donderdag 30 juni 2005 @ 13:35:
yep, dat is het bedankt!

Overigens is het raar dat Internet Explorer als previousSibling van een LI een LI heeft, en dat Firefox en Safari als previousSibling een textNode hebben..
Hangt er een beetje vanaf welke elementen je op datzelfde niveau hebt in je tree denk ik? Of is dat zo bij ELK listitem?

Saved by the buoyancy of citrus


Verwijderd

Topicstarter
Ik denk dat niet-IE browsers whitespace tussen LI's zien als een textnode, en IE niet.

  • chris
  • Registratie: September 2001
  • Laatst online: 11-03-2022
Aracon heeft gelijk. Je moet gewoon previousSibling doen tot je een nieuwe LI tegenkomt :)

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 14:58

crisp

Devver

Pixelated

Intentionally left blank

Pagina: 1