bert: this.nextSibling undefined

Hi,

kann mir jemand sagen, warum bei

  
<div class="news">  
  <a href="javascript:show_news_inhaltt(this.nextSibling)">  
    <?php echo $row["Datum_link"]; ?> Uhr - <b><?php echo $row["Titel"]; ?></b>  
  </a>	  
  <div class="news_inhalt">  
    <?php echo $row["Inhalt"]; ?>  
  </div>  
</div>	

in der Funktion show_news_inhaltt(newsinhalt) "newsinhalt" undefined ist??
Also die Funktion besteht einfach nur aus einem alter(newsinhalt);

  1. kann mir jemand sagen, warum bei

    <div class="news">
      <a href="javascript:show_news_inhaltt(this.nextSibling)">

    Kannst du sagen, warum du hier einen Link und das href Attribut verwendest?

    Struppi.

    1. Kannst du sagen, warum du hier einen Link und das href Attribut verwendest?

      Ist nur eine von vielen Varianten...

      <div onclick="javascript:show_news_inhalt(this.nextSibling)">  
        <?php echo $row["Datum_link"]; ?> Uhr - <b><?php echo $row["Titel"]; ?></b>  
      </div>	  
      <div class="news_inhalt">  
        <?php echo $row["Inhalt"]; ?>  
      </div>
      

      hier wird [object Text] ausgegeben. aber der nächste Sibling des DIV ist doch eindeutig ein DIV.. oder? Kann das damit zusammenhängen, dass über $row[] auch HTML Tags eingefügt werden? Eigentlich doch nicht, weil das alles nur Childs sind und keine Siblings..

      Gibt es vielleich auch die einfache möglichkeit, die Funktion nur mit this aufzurufen und einfach das nächste DIV mit der class="news_inhalt" anzusprechen?

      1. hier wird [object Text] ausgegeben.

        na klar, der Zeilenumbruch!

        1. Oder vielleicht etwas einfacher:
          Ich möchte einfach nur Datensätze aus einer DB so ausgeben, dass man den Titel und das Datum sieht, und bei klick der passende Inhalt unterhalb des Titels eingeblendet wird.

          Als Vorlage habe ich die CSS Infobox genommen, wo der Inhalt beim hovern des Titels erscheint.
          Damit das aber beim klicken passiert (und beim loslassen der Taste nicht wieder verschwindet) dachte ich mir, da muss js her. Die Vorlage habe ich aber beibehalten.

          Vielleicht habt ihr ja auch einen besseren Denkanstoß, wie ich meine News realisieren kann. Die Daten sollen jedenfalls alle auf einmal geladen werden und beim klick auf den Titel soll keine neue Seite kommen, sondern der Inhalt unterhalb des Titels eingeblendet werden und der Rest nach unten verschoben werden..

          1. Hi,

            Ich möchte einfach nur Datensätze aus einer DB so ausgeben, dass man den Titel und das Datum sieht, und bei klick der passende Inhalt unterhalb des Titels eingeblendet wird.

            diese Informationen erscheinen mir recht eindeutig zusammen zu gehören. Strukturell sind sie also gruppiert. Das HTML-Element, das zusammen gehörende Inhalte gruppiert, nennt sich "<div>".

            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
      2. Kannst du sagen, warum du hier einen Link und das href Attribut verwendest?

        Ist nur eine von vielen Varianten...

        Naja, aber die schlechteste, da in diesem Fall this = window ist

        hier wird [object Text] ausgegeben. aber der nächste Sibling des DIV ist doch eindeutig ein DIV.. oder?

        Sieht der Fx anders: https://developer.mozilla.org/En/DOM/Node.nextSibling (Notes)

        Kann das damit zusammenhängen, dass über $row[] auch HTML Tags eingefügt werden?

        Das wäre vielleicht bei einem anderen Problem interessant gewesen. Daher ist es bei JS Problemen immer ratsam den HTML Code zu zeigen, der PHP Code interessiert eher weniger.

        Gibt es vielleich auch die einfache möglichkeit, die Funktion nur mit this aufzurufen und einfach das nächste DIV mit der class="news_inhalt" anzusprechen?

        Es gibt eine Reihe von Möglichkeiten, getElementsByTagName oder/und getElementsByClassName kommt halt auf die Struktur deines HTML an.

        Struppi.

        1. Es gibt eine Reihe von Möglichkeiten, getElementsByTagName oder/und getElementsByClassName kommt halt auf die Struktur deines HTML an.

          Problem: es gibt mehrere DIVS/SPANS mit der selben class. Also brauche ich irgendwie das vom div mit dem onclick event aus NÄCHSTE mit dieser class. Wahlweise kann ich onclick auch in das übergeordnete DIV schreiben, sodass es sich bei dem news_inhalt Div um ein child handelt.
          Aber wie komme ich denn auf das folgende?

          1. Aber wie komme ich denn auf das folgende?

            this.parentNode.getElementsByTagName("div")[1]
            ist das 2te DIV innerhalb des Elternelements

          2. Hallo,

            Problem: es gibt mehrere DIVS/SPANS mit der selben class. Also brauche ich irgendwie das vom div mit dem onclick event aus NÄCHSTE mit dieser class. Wahlweise kann ich onclick auch in das übergeordnete DIV schreiben, sodass es sich bei dem news_inhalt Div um ein child handelt.
            Aber wie komme ich denn auf das folgende?

            bringt es dich weiter, wenn du eine Liste aller Geschwister-divs bekommst?

            parentNode.getElementsByTagName("div")

            Natürlich kannst du auch nach dem Laden der Seite über das Eltern-Div herfallen, alle seine Kindknoten durchlaufen (sehr elegant mit for-in) und alle Textknoten rauswerfen (sind ja eh nur Whitespaces im Quelltext). Danach kannst du auch mit nextSibling glücklich werden.

            Ich glaube allerdings, man könnte die gesamte Struktur sauberer und effizienter aufbauen. Kann ich aber von hier aus nicht mit Sicherheit sagen.

            So long,
             Martin

            --
            Männer haben nur eine Angst: Die Angst, kein Mann zu sein.
              (Liv Tyler, US-Schauspielerin)
            1. Hallo,

              Eine brauchbare Liste von Kindknoten bekommt man auch bequem über element.children(). Damit lässt sich das lästige Problem mit den Text- und Kommentarknoten bei childnodes umgehen, für die man sich man nur selten wirklich interessiert.

              Das steht leider nicht in SELFHTML und ist vielleicht auch nicht überall implementiert.

              Bin zufällig darauf gestoßen, als ich eine Variable namens children verwenden wollte: Mein Editor hat sie brav in anderer Farbe dargestellt, und siehe: Google findet Infos dazu.

              Gruß, Don P

              1. Eine brauchbare Liste von Kindknoten bekommt man auch bequem über element.children().

                Das ist eine Collection, keine Funktion und zumindest im Firefox funktioniert sie auch (es scheint eine IE Erfindung zu sein)

                Struppi.

                1. Hallo,

                  Das ist eine Collection, keine Funktion und zumindest im Firefox funktioniert sie auch (es scheint eine IE Erfindung zu sein)

                  Ach ja, eine Collection. Meinte ich ja eigentlich ;-)

                  Seit ich sie kenne, benutze ich sie öfters mal. Das Heckmeck mit den nodetypes der childnodes ging mir schon lange auf die Nerven.
                  Die children können auch nachgerüstet werden, falls sie ein Browser nicht unterstützen sollte. Aber aufpassen, dass es keine gansta werden...

                  Gruß, Don P

          3. Hi,

            Problem: es gibt mehrere DIVS/SPANS mit der selben class. Also brauche ich irgendwie das vom div mit dem onclick event aus NÄCHSTE mit dieser class. Wahlweise kann ich onclick auch in das übergeordnete DIV schreiben, sodass es sich bei dem news_inhalt Div um ein child handelt.

            Mach letzteres.
            Dann brauchst du news_inhalt nämlich nicht mehr per JavaScript ermitteln, sondern kannst das CSS überlassen - Stichwort: Nachfahrenselektor.

            MfG ChrisB

            --
            Light travels faster than sound - that's why most people appear bright until you hear them speak.