christian: explorer like menu

möchte folgenden script für meine link seite verwenden..
________________________________________________________

<html>

<head>
<title>explorer like menu</title>

<style type="text/css">
div.sItem{margin-left:10px;cursor:pointer;cursor:hand}
</style>

<script type="text/javascript">
function showSubMenu(e,o) {

// e = event object in W3C DOM compatible browsers (Ex. Mozilla)
 // o = div object clicked by user

// Parsing all children of the clicked div
 for (i=0;i<o.childNodes.length;i++) {
  // Find all div having the CSS class sItem
  if (o.childNodes[i].className=="sItem") {
   // If the div is hidden, make it visible
   if (o.childNodes[i].style.display=="none") {
    o.childNodes[i].style.display="block"
   } else if (o.childNodes[i].style.display=="block") {
    // If the div is visible, hide it
    o.childNodes[i].style.display="none"
   }

}
 }

// Stop click event propagation in upper div hierarchy
 if (document.all) {
  // Code for IE browsers
  window.event.cancelBubble=true
 } else if (!document.all && document.getElementById) {
  // Code for Mozilla browsers
  e.stopPropagation()
 }
}
</script>

</head>

<body>

<div class="sItem" style="display:block" onclick="showSubMenu(event,this)">
 ordner1
 <div class="sItem" style="display:none" onclick="showSubMenu(event,this)">
  datei
        </div>
</div>
<div class="sItem" style="display:block" onclick="showSubMenu(event,this)">
 ordner2
 <div class="sItem" style="display:none" onclick="showSubMenu(event,this)">
  datei
        </div>
</div>
<div class="sItem" style="display:block" onclick="showSubMenu(event,this)">
 ordner3
 <div class="sItem" style="display:none" onclick="showSubMenu(event,this)">
  datei
        </div>
</div>

</body>

</html>

_________________________________________________________________________________

wie muss man den script abändern, dass nur ein ordenerinhalt aufs mal angezeigt werden kann (d.h. wird zum bsp bei geöffnetem ordner1 ordner2 angeklickt schliesst sich ordner 1 automatisch wieder).
dürfte wohl nicht allzu schwierig sein für jemand der sich dieser sprache mächtig ist :) danke für jede antwort.
gruss christian

  1. Guten Abend, Christian!

    wie muss man den script abändern, dass nur ein ordenerinhalt aufs mal angezeigt werden kann (d.h. wird zum bsp bei geöffnetem ordner1 ordner2 angeklickt schliesst sich ordner 1 automatisch wieder).
    dürfte wohl nicht allzu schwierig sein für jemand der sich dieser sprache mächtig ist :) danke für jede antwort.

    Hm - lass' uns mal zusammen nachdenken:

    Weisst du denn überhaupt, was die einzelnen Teile des Scripts machen? Hast du unter Umständen schon eine kleine Testseite gebastelt, auf der man das Menü ansehen kann und anhand dessen du genauer beschreiben kannst, was wann auf welche Weise passieren soll? Vielleicht auch schon eine Ahnung, was nicht so geht, wie du es dir vorstellst und woran es eventuell liegen könnte?

    Siehst du, wir helfen dir gern beim Nachdenken und beim Finden einer Lösung. Aber wir werden dir ganz einfach nicht die Lösung einfach so in die Hand drücken. Das tun wir nicht etwa, weil wir böse Menschen wären, sondern weil wir mit diesem Forum einen anderen Zweck verfolgen. Für Produktsupport, wie er für die Anpassung eines vorgefertigten Scripts unter Umständen benötigt wird, ist der Hersteller des Produkts (in diesem Fall des Javascripts) zuständig. Wenn du also das Produkt auf deine Bedürfnisse angepasst haben möchtest, wirst du dich dorthin wenden müssen - das könnte allerdings bedeuten, dass das Geld kostet.

    Wenn du kein Geld investieren möchtest, wirst du deinen eigenen Kopf benützen müssen. Dabei helfen wir dir, wie gesagt, sehr gern.

    File Griese,

    Stonie

    --
    Ein schlechtes Statement spricht für sich - jeder Kommentar ist verschwendete Energie, die einem bei wirklich wichtigen Unterfangen fehlen könnte.
  2. Hallo Christian,

    bin zwar in JavaScript auch noch nich so sattelfest, aber da dir bisher noch niemand brauchbar geantwortet hat (was nicht heisst, dass du über Stonies Bemerkung mal nachdenken könntest) versuch ichs mal:

    Also 1. Was mir aufgefallen ist, hinter deiner for-Schleife kommt eine etwas -mir zumindest- merkwürdige erscheinende Anweisung, da is eine Methode "stopPropagation" und ein Objekt "cancelBubble" die in der selfhtml Objekt-Referenz nicht gelisted sind, daher direkt die Frage, hast du sicher das ganze Skript kopiert?
    Sowohl IE als auch Mozilla (allerdings nur Version 6 bzw 1.4)interpretieren den ganzen Code auch problemlos ohne diesen Abschnitt hinter der Schleife. Andererseits könnte ich mir beinah vorstellen das da genau das Problem liegen könnte.
    Daher 2.: Probier doch mal folgendes: Schmeiß den Kram ganz raus und pack vor die for-Schleife erstmal ne Anweisung die dir pauschal und unabhängig vom tatslchlichen Zustand die Kindknoten aller divs auf style.display="none" setzt. Damit schließt du erstmal das ganze Menü und dann öffnest du in der for schleife das entsprechende div wieder.

    Wie du das genau erreichst weiß ich jetzt gar nicht so genau aber wahrscheinlich mittels einer verschachtelten Schleife die erstmal alle benachbarten Knoten und dann innerhalb dieser alle Kindknoten anspricht. Bin wie gesagt mit dem node-Objekt auch noch nich so warm, aber prinzipiell sollte das klappen, mehr dazu unter
    http://selfhtml.teamone.de/javascript/objekte/node.htm.

    Grundsätzlich is JavaScript nich sooo schwer, aber man muss sich schon ein wenig damit auseinandersetzen, dann erzielt man mit zunehmender Zeit exponentielle Erfahrungszuwächse und Spaß machts auch noch.

    Hoffe hab etwas helfen können, an alle anderen: Falls ich Mist geschrieben haben sollte, dann fasst das einfach als einen Versuch eines Laien auf einem anderen zu helfen, ohne die Absicht dabei verfolgt zu haben, dies ehrwürdige Forum zu entweihen.

    Grüße i.

    1. Hallo,

      http://selfhtml.teamone.de/dhtml/modelle/microsoft.htm#event_bubbling

      Gruß

      Kurt

      --
      "Mut ist eine Tugend, doch Angst beweist Vernunft, Bewusstsein und Phantasie. Die Kunst ist es abzuwägen."
      http://faq.united-web.at
      http://elektro-dunzinger.at
      http://shop.elektro-dunzinger.at
      1. Hallo Kurt, hallo werndt,

        hmmm, der Abschnitt Dhtml blieb mir bisher zumindest in dieser Tiefe noch ziemlich unerschlossen. Aber gut das so gesehen zu haben, bastel grade selber an ner sache wo sowas wahrscheinlich zum Einsatz kommen muss.
        Bedanke mich aber herzlich für die Informationen. Im übrigen verweise ich nochmal auf den letzten Abschnitt meines letzten Postings.

        n8 i.

        1. HalloIsam,

          hmmm, der Abschnitt Dhtml blieb mir bisher zumindest in dieser Tiefe noch ziemlich unerschlossen. Aber gut das so gesehen zu haben, bastel grade selber an ner sache wo sowas wahrscheinlich zum Einsatz kommen muss.
          Bedanke mich aber herzlich für die Informationen. Im übrigen verweise ich nochmal auf den letzten Abschnitt meines letzten Postings.

          Gerne geschehen. Aber Tatsache ist, daß ich davon nur weiß, weil ich bei der Erstellung meines Menüs über diese Problematik gestolpert bin. Mein Wissen in Bezug auf DHTML und JavaScript ist ebenfalls sehr begrenzt. ;-)

          Gruß

          Kurt

          --
          "Mut ist eine Tugend, doch Angst beweist Vernunft, Bewusstsein und Phantasie. Die Kunst ist es abzuwägen."
          http://faq.united-web.at
          http://elektro-dunzinger.at
          http://shop.elektro-dunzinger.at
    2. N'abend Isam

      stopPropagation, oft gefolgt von einem munteren preventDefault,
      und auch cancelBubble benötigst Du häufig bei solchen dynamischen
      menus. Du fängst damit an einem von Dir bestimmten Punkt einen
      event ab, bzw. unterbindest das default-Verhalten eines browsers.
      Angenommen, Du hättest eine geschachtelte (Verzeichnis-) Struktur,
      und stelltest die dar als ineinandergeschachtelte divs, von denen
      ein jedes anclickbar sein soll (um zB. Ebenen zu schliessen oder
      zu öffnen, oder auch andre Dinge zu tun), und Du möchtest nicht,
      daß sämtliche übergeordneten divs ebenfalls auf diesen einen click
      reagieren (und das möchtest Du nicht, wenn Du ein solches menu
      baust) - dann benutzt Du stopPropagation, preventDefault, und
      auch cancelBubble.

      gruß

      werndt