reinhard_muc: Wie stellt man Knotenposition in einer Baumstruktur fest?

Hallo Leute,
wie kann ich feststellen, an welcher Stelle ein Knoten in einer Baumstruktur steht? Beispiel Aufzählungsliste:
<ul>
  <li onclick="xyz(this)">Probieren geht &uuml;ber Studieren</li>
  <li onclick="xyz(this)">Liebe geht &uuml;ber Triebe</li>
  <li onclick="xyz(this)">Tante f&auml;llt &uuml;ber Kante</li>
</ul>
Die Funktion "xyz" soll feststellen, welcher der Listeneinträge angeklickt wurde. Ich habe keine Eigenschaft des Objektes <li> gefunden, mit der ich die Positionsnummer ermitteln könnte. Natürlich könnte ich jedem Listenpunkt eine laufende id mitgeben, aber das erscheint mir zu umständlich (muß extra programmiert werden). Gibt es also beim Objekt <li> eine Eigenschaft, in der die Positionsnummer gespeichert ist?
Schöne Grüße,
Reinhard

  1. Gibt es also beim Objekt <li> eine Eigenschaft, in der die Positionsnummer gespeichert ist?

    Nein.

    Struppi.

  2. Hi,

    Ich habe keine Eigenschaft des Objektes <li> gefunden, mit der ich die Positionsnummer ermitteln könnte.

    die gibt's auch nicht. Gehe zum Elternelement und zähle durch.

    Gibt es also beim Objekt <li> eine Eigenschaft, in der die Positionsnummer gespeichert ist?

    Nein, aber nachdem Du sie kennst, kannst Du sie in eine neue Eigenschaft schreiben.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. die gibt's auch nicht. Gehe zum Elternelement und zähle durch.

      Zusatzfrage: kann ich beim Durchzählen erkennen, ob ein Listenpunkt angeklickt wurde oder nicht? Z.B. mit dem Objekt "event"?

      Ich fürchte, ich muß doch eine fortlaufende ID vergeben ... Schade, ist aber vielleicht doch einfacher.

      Gruß, Reinhard

      1. » die gibt's auch nicht. Gehe zum Elternelement und zähle durch.

        Zusatzfrage: kann ich beim Durchzählen erkennen, ob ein Listenpunkt angeklickt wurde oder nicht? Z.B. mit dem Objekt "event"?

        Wieso? du hast doch schon das Element.

        Struppi.

        1. Wieso? du hast doch schon das Element.

          »»

          Leider ja nicht: wenn ich z.B. auf den zweiten Listenpunkt klicke, gibt es - auch nach Deiner früheren Antwort - keine Eigenschaft des Objekts "this", aus der ich den Index [1] auslesen könnte. Ich hatte in meiner Zusatzfrage gehofft, daß der angeklickte Listenpunkt durch den Mausklick irgendeine Eigenschaft bekommt, der ihn von den übrigen Listenpunkten unterscheidet. Scheint aber nicht so zu sein.

          Vermutlich werde ich doch jedem Listenpunkt einen Zähler mitgeben (nullbasiert, damit er mit dem Knotenindex übereinstimmt) und dann beim Klicken den Zähler abfragen.

          Reinhard

          1. Hi,

            »» Wieso? du hast doch schon das Element.
            Leider ja nicht: wenn ich z.B. auf den zweiten Listenpunkt klicke, gibt es - auch nach Deiner früheren Antwort - keine Eigenschaft des Objekts "this", aus der ich den Index [1] auslesen könnte.

            Du brauchst nicht den Index, um das Element zu finden, wenn Du das Element bereits besitzt. Und das tust Du - Du hast erfolglos versucht, darin den Index zu finden.

            Ich hatte in meiner Zusatzfrage gehofft, daß der angeklickte Listenpunkt durch den Mausklick irgendeine Eigenschaft bekommt, der ihn von den übrigen Listenpunkten unterscheidet. Scheint aber nicht so zu sein.

            Der angeklickte Listenpunkt unterscheidet sich insofern von allen anderen, dass er als einziger mit dem von Dir übergebenen Wert identisch ist.

            Vermutlich werde ich doch jedem Listenpunkt einen Zähler mitgeben (nullbasiert, damit er mit dem Knotenindex übereinstimmt) und dann beim Klicken den Zähler abfragen.

            Klar! Warum einfach, wenn es auch umständlich geht?

            Cheatah

            --
            X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
            X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
            X-Will-Answer-Email: No
            X-Please-Search-Archive-First: Absolutely Yes
  3. Lieber reinhard_muc,

    <ul>
      <li onclick="xyz(this)">Probieren geht &uuml;ber Studieren</li>
      <li onclick="xyz(this)">Liebe geht &uuml;ber Triebe</li>
      <li onclick="xyz(this)">Tante f&auml;llt &uuml;ber Kante</li>
    </ul>

    die Funktion xyz kennt nun einen Parameter, der das <li>-Elementobjekt enthält. Wenn Du unbedingt eine "laufende Nummer" zusätzlich benötigst, kannst Du sämtliche Kindknoten des <ul>-Elementes durchlaufen und mit dem "==="-Operator prüfen, ob es sich dabei um das im Parameter übermittelte Objekt handelt.

    Mein Ansatz wäre ein anderer gewesen. Ich hätte die Funktion dem <ul>-Element zugewiesen, um dann mit event.target oder event.srcElement (letzteres ist IE-only) das tatsächlich angeklickte Elementobjekt zu ermitteln. Falls in Deinem <li>-Element noch Kindelemente sind, musst Du erst solange den Elementenbaum nach oben klettern, bis Du tatsächlich ein <li>-Element in Händen hälst (dazu eigent sich die tagName-Eigenschaft).

    Ich habe das einmal für meinen Explorer-Look gemacht. Kannste Dir ja anschauen...

    Liebe Grüße,

    Felix Riesterer.

    --
    ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)