Kalle_B: Verschachtelte Namen

Hallöle,

Terminkalender. 1 .. 31 Tage, pro Tag 0 .. n Termine. Jeder Termin hat einen Ort und weitere Daten:

<div name=t01><div name=ort_name>Adorf</div>...</div>
<div name=t01><div name=ort_name>Adorf</div>...</div>
<div name=t01><div name=ort_name>Bdorf</div>...</div>
<div name=t02><div name=ort_name>Cdorf</div>...</div>
<div name=t02><div name=ort_name>Ddorf</div>...</div>

Nun möchte ich mit Javascript die Termine pro Ort zählen. Wie greife ich nun zu, z.B. um den Namen Cdorf zu lesen?

alert( document.getElementsByName('t02')[0].getElementsByName('ort_name')[0].innerHTML );

ergibt den Fehler "Type Error"

alert( document.getElementsByName('t02')[0].('ort_name')[0].innerHTML );

ergibt den Fehler "Syntax Error"

Habe im Moment keine Idee, wie ich an den Wert komme.

Kalle

  1. Hi,

    <div name=t01><div name=ort_name>Adorf</div>...</div>

    div hat kein name-Attribut.

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    O o ostern ...
    Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
    1. Hi,

      div hat kein name-Attribut.

      Als es noch nicht geschachtelt war, hat Opera klaglos zugegriffen. Lesend und schreibend.

      Gut, dann brauche ich also ein Element oberhalb von <p>, das man mit Namen anreden darf.

      Jetzt komm mir aber keiner mit <table>, <div> ist doch hier der Gott. Ach ja, den darf man ja auch nicht mit Namen anreden.

      Gruß, Kalle

      1. Als es noch nicht geschachtelt war, hat Opera klaglos zugegriffen. Lesend und schreibend.
        Gut, dann brauche ich also ein Element oberhalb von <p>, das man mit Namen anreden darf.
        Jetzt komm mir aber keiner mit <table>, <div> ist doch hier der Gott. Ach ja, den darf man ja auch nicht mit Namen anreden.

        Denke bei name eher an einen bezeichner von Daten, die via http versendet werden sollen. Denke nicht von name als einer Art Selektor im Dom.
        Einige Ausnahmen wie a area und applet sind historisch bedingt.

        Das für dich geeignete Attribut heisst class.

        mfg Beat

        --
        ><o(((°>           ><o(((°>
           <°)))o><                     ><o(((°>o
        Der Valigator leibt diese Fische
        1. Das für dich geeignete Attribut heisst class.

          Okay, jetzt sieht der Test so aus:

          <div class='t01'>  
          <i class=ort_name>Weinheim</i>  
          <p class=termin>  
          19:00&nbsp;  
          <i>Wein 4 km</i>  
          -22:00  
          Arbeitskreis Kommunales &nbsp; <i>4330</i>  
          <br>Ortsverein Weinheim &nbsp; Café 45 im OEG-Bahnhof  
          </p>  
          </div>  
          
          

          alert ( document.getElementsByClassName('t01')[0].getElementsByClassname('ort_name')[0].innerHTML );

          Opera-Fehler: Type Error

          alert ( document.getElementsByClassName('t01')[0].('ort_name')[0].innerHTML );

          Opera-Fehler: Syntax Error

          Das Problem wurde also nicht gelöst durch Änderung des Atrributs.

          MfG Kalle

          1. Okay, Problem ist wohl zu schwer, also andere Denkweise:

            <body>
            <div class=mist></div>

            document.getElementsByClassName('mist')[0].innerHTML = document.getElementsByClassName('t01')[0].innerHTML;
            alert ( document.getElementsByClassName('ort_name')[0].innerHTML );

            Das läuft erstmal ...

            Gruß, Kalle

            1. hat mich ja nicht ruhen lassen.

              Also, so scheint's auch zu gehen:

              alert ( document.getElementsByClassName('t01')[0].document.getElementsByClassName('ort_name')[0].innerHTML );  
              
              

              Ein Dokument im Dokument. Da muss man erstmal drauf kommen.

              Mit Logik hat das jetzt nichts mehr zu tun, oder?

              Kalle

              1. Hi,

                Mit Logik hat das jetzt nichts mehr zu tun, oder?

                Nein, aber das ist ja bei dir nichts neues.

                MfG ChrisB

                --
                “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
                1. Hi,

                  »»»» Mit Logik hat das jetzt nichts mehr zu tun, oder?

                  Nein, aber das ist ja bei dir nichts neues.

                  Okay, du bist Insider. Du weisst, dass ich eigentlich Eintänzer werden wollte in Central-Café. Aber dann war da nur noch dieser schlecht bezahlte Job als Softwareentwickler.

                  Ich hab's mir nicht ausgesucht, ehrlich.

                  Und ganz besonders vermisse ich die Mädels hier.

                  Kalle

                  1. Hi,

                    Aber dann war da nur noch dieser schlecht bezahlte Job als Softwareentwickler.

                    Wenn du für das, was du zusammenstümperst, überhaupt bezahlt wirst, hast du m.E. nicht den geringsten Grund, dich zu beschweren.

                    MfG ChrisB

                    --
                    “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
                    1. MfG ChrisB

                      Mit unfreuntlichen Grüssen triffts wohl eher.

                      p.s.: der flamet fast nur rum ;-)

                      1. Mahlzeit kunert0345,

                        p.s.: der flamet fast nur rum ;-)

                        Mag sein ... aber Recht hat er trotzdem.

                        MfG,
                        EKKi

                        --
                        sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
                      2. @@kunert0345:

                        nuqneH

                        Mit unfreuntlichen Grüssen triffts wohl eher.
                        p.s.: der flamet fast nur rum ;-)

                        Bleib bitte in deinem Thread.

                        Oder noch besser: Gehe nach /dev/null. Begib dich direkt dorthin. Gehe nicht über /etc/hosts. Ziehe nicht 4000 /usr/bin/whois ein.

                        Qapla'

                        --
                        Alle Menschen sind klug. Die einen vorher, die anderen nachher. (John Steinbeck)
              2. Hi,

                so, um noch mal auf die Sache mit der Logik zurückzukommen ...

                Also, so scheint's auch zu gehen:

                alert ( document.getElementsByClassName('t01')[0].document.getElementsByClassName('ort_name')[0].innerHTML );

                  
                Aus dem ursprünglich gezeigten Code und diesem hier schliesse ich jetzt mal, dass du nur die Elemente mit einer bestimmten Eigenschaft (name/class) \*unterhalb\* eines anderen Elementes haben willst.  
                  
                
                > Ein Dokument im Dokument. Da muss man erstmal drauf kommen.  
                >   
                > Mit Logik hat das jetzt nichts mehr zu tun, oder?  
                  
                Nein, so wie du es betrachtest zumindest nicht.  
                  
                Ein "Dokument im Dokument" ist schon widersprüchlich. Wenn (I)Frames im Spiel sind, dann könnte man diese Formulierung evtl. noch verwenden, ist hier aber wohl nicht der Fall.  
                  
                Da du diesen Zweig ja in erster Hinsicht für den IE entwickelt hast, schauen wir doch mal in der MSDN nach, und zwar beim [Element Prototyp](http://msdn.microsoft.com/en-us/library/dd347058%28VS.85%29.aspx). Von dem erben alle HTML-Element-Objekte, und der bringt eine Eigenschaft document mit. Deren Beschreibung wiederum ist etwas an der Sache vorbei, bzw. eher falsch:  
                "Retrieves the HTML document in a given popup window."  
                Popups sind bei uns nicht im Spiel, und ausserdem wäre es unsinnig, wenn \*jedes\* HTML-Element-Objekt irgendwie einen Bezug zu einem Popup bereitstellen würde - wozu sollte das gut sein?  
                  
                Da bspw. `javascript:alert(document.body.document === document);`{:.language-javascript} im IE in die Adresszeile eingetippt true ergibt, können wir schliessen, dass über diese Eigenschaft jeder HTML-Element-Knoten schlicht und einfach eine Referenz auf das Dokument, in dem er sich befindet bzw. zu dem er gehört, bereitstellt. (Analog zu bspw. Formularelementen, bei denen wir in der Eigenschaft form die Referenz auf das Formular, zu dem sie gehören, vorfinden.)  
                  
                Mit dieser Erkenntnis jetzt zurück zu deinem obigen Code,  
                
                > `alert ( document.getElementsByClassName('t01')[0].document.getElementsByClassName('ort_name')[0].innerHTML );`{:.language-javascript}  
                
                - du ermittelst dir hier die Referenz auf das erste Element mit der Klasse t01 im Dokument, und gehst von dieser dann wieder zurück auf's Dokument - also ein ebenso redundanter wie sinnfreier Schritt, denn da hättest du gleich  
                `alert ( document.getElementsByClassName('ort_name')[0].innerHTML );`{:.language-javascript}  
                verwenden können, und würdest genau das selbe Ergebnis erhalten.  
                  
                Und wenn also meine obige Vermutung, dass du nur die Elemente mit der Klasse ort\_name, die Nachfahren des ersten Elements mit Klasse t01 sind, haben willst - dann macht dein Code also noch nicht mal das, denn er würde dir (wenn du den zweiten Index hochzählst, also über alle gefundenen Elemente iterierst) \*alle\* Element mit Klasse ort\_name im Dokument liefern, egal ob diese nun Nachfahren ersten vom Element mit Klasse t01 sind oder nicht.  
                  
                Du hast eine "Lösung", die also nicht mal eine ist, nach einem knappen Blick drauf mit  
                
                > Also, so scheint's auch zu gehen  
                
                bewertet.  
                  
                Von einem Softwareentwickler hätte ich jetzt eigentlich erwartet, dass er dazu wenigstens mal einen minimalen Testcase erstellt, um die Vermutung, dass der Code das gewünschte bewirkt, zu verifizieren bzw. in diesem Falle sehr schnell zu falsifizieren.  
                  
                Du hingegen hast dich offenbar mit "Hey cool, das funzt" zufriedengegeben, und dabei ist dir vermutlich nicht mal aufgefallen, dass das vielleicht zufällig im vorliegenden speziellen Anwendungsfall zwar so sein mag, in allgemeineren Szenarien (wo genau das oben formulierte Ergebnis erwartet/vorausgesetzt wird) aber ganz und gar nicht.  
                  
                MfG ChrisB  
                  
                
                -- 
                “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
                
          2. Lieber Kalle_B,

            <div class='t01'>

            <i class=ort_name>Weinheim</i>
            <p class=termin>
            19:00&nbsp;
            <i>Wein 4 km</i>
            -22:00
            Arbeitskreis Kommunales &nbsp; <i>4330</i>
            <br>Ortsverein Weinheim &nbsp; Café 45 im OEG-Bahnhof
            </p>
            </div>

              
            das machen wir jetzt mal richtig semantisch:  
              
            ~~~html
            <dl id="kalender">  
                <dt>Weinheim</dt>  
                <dd>  
                    <p class="uhrzeit">  
                        19:00  
                        <em>Wein 4km</em>  
                        - 22:00  
                    </p>  
                    <p class="ort">  
                        Arbeitskreis Kommunales  
                        <em>4330</em>  
                        Ortsverein Weinheim Café 45 im OEG-Bahnhof  
                    </p>  
                </dd>  
              
                <dt>Buxtehude</dt>  
                <dd>  
                    ...  
                </dd>  
            </dl>
            

            So. Und worauf genau willst Du jetzt mittels JS zugreifen?

            Liebe Grüße,

            Felix Riesterer.

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

        <div> ist doch hier der Gott.

        da hast Du absolut Recht. Sobald jemand <div> als das Allheilmittel schlechthin erkennt, denkt sich hier jeder sofort "oh Gott".

        Semantisches Markup ist das Mittel der Wahl.

        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. Mahlzeit Kalle_B,

    <div name=t01><div name=ort_name>Adorf</div>...</div>
    <div name=t01><div name=ort_name>Adorf</div>...</div>
    <div name=t01><div name=ort_name>Bdorf</div>...</div>
    <div name=t02><div name=ort_name>Cdorf</div>...</div>
    <div name=t02><div name=ort_name>Ddorf</div>...</div>

    *Mjam*, <div>-Suppe ...

    Deine <div>s möchten ganz ganz dringend <li>s sein, die sich in einem <ul> tummeln dürfen!

    MfG,
    EKKi

    --
    sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
    1. Hallo all,

      ich muss jetzt wirklich mal innehalten und nachdenken, ob meine heutigen Fragen so seltsam sind. In den letzten Wochen ertappe ich mich dabei, wie ich eine Frage formuliere aber das Formular dann doch nicht abschicke.

      Es hat ja einen gewissen Unterhaltungswert, dem ChrisB zu antworten, dass ich noch nie Sinn für Logik hatte. Richtig ist aber, dass Lösungen bei Kunden niemals nur mit Logik zu erreichen sind. Du musst "spüren", was der Kunde nie ausgesprochen, aber gemeint hat. Das wird auf der UNI nicht gelehrt und kann deshalb nicht sein. Ich habe es auch nie gelernt und es fällt mir schwer.

      Irgendwie ist es sowas wie ein Steinhauer (Bildhauer). Er hat die Idee, dass ein bestimmter Felsblock gut in das Foyer eines Flughafens passt. Ein roter Granit, der bearbeitet und poliert die alte "Tante Ju" sein wird. So etwas gab es noch nie. Aber er braucht Informationen zu den aktuellen Bearbeitungsmethoden, zur Bedienung der CNC- Fräse, dem Laser- und Wasserhochdruckschneider. Denn er weiss, mit Hammer und Meissel kann er diese Idee nicht verwirklichen.

      Die Techniker, die er fragt, antworten: Steine können nicht fliegen, Sie können daraus kein Flugzeug machen. Die Frage, die zu dieser Antwort passt, hatte der Künstler gar nicht gestellt ...

      -----

      Auch ich fühle mich manchmal so wie dieser "Künstler". Auf meine Frage kommen hier dann so Antworten wie "Nimm lieber Holz statt Stein" (class statt name - das Problem aber bleibt).

      Okay, ich erstelle per PHP einen stinknormalen Veranstaltungskalender.

      Den möchte ich nun drucken als aufklappbare Visitenkarte.

      Das datenliefernde PHP- Programm ist genau dasselbe (p591), aber ich habe nun Container für die Tage des Monats. Dort, wo sie nach dem Drucken, Heften Falzen und Schneiden hingehören.

      Funktioniert gut und wurde ein paarmal verkauft.

      Nun möchte ich noch eine Statistik drucken. Da Javascript die Termine "verteilt", kann es sie auch zählen. Aber wie können Städtenamen erkannt werden?

      -----

      Ich denke, auch wenn ich hier manchmal den Troll spiele, hilft mir schon die Formulierung meiner Fragen weiter.

      Ich weiss, dass sie gelesen und be-dacht werden, ich frage also nicht gegen die Wand. Und deshalb bemühe ich mich, mich verständlich auszudrücken. Oft ist das schon der Ansatz zur Lösung.

      Ich möchte euch einfach mal DANKE sagen für das aktive Lesen.

      Lieben Gruß und gute Nacht,
      Kalle

      1. Hi,

        ich muss jetzt wirklich mal innehalten und nachdenken, ob meine heutigen Fragen so seltsam sind.

        Sie sind, und das stört mich vor allem, redundant.

        Februar 2007: Kalle_B möchte wissen, warum getElementsByName('mitglied') sein <h1 name=mitglied ..> nicht findet - und bekommt es erklärt.

        Dezember 2008: Kalle_B möchte wissen, warum getElementsByName("std") sein <td name=std> nicht findet - und bekommt es erneut erklärt.

        Dezember 2009: Der gleiche Kram - *schon* *wieder* ...!

        Es hat ja einen gewissen Unterhaltungswert, dem ChrisB zu antworten, dass ich noch nie Sinn für Logik hatte. Richtig ist aber, dass Lösungen bei Kunden niemals nur mit Logik zu erreichen sind.

        Das vor allem absurde scheint mir zu sein, dass du überhaupt für „Kunden” arbeitest.

        Wenn du schon die Lösungen für Probleme, die sich dir beim machen deines *Jobs* ergeben, selten selber findest, und sie vom Forum lösen lässt - darf man dann nicht wenigstens erwarten, dass du einmal gegebene Erklärungen mal im Gedächtnis oder deinen Arbeitsunterlagen derart ablegst, dass du sie beim nächsten Mal auch wiederfindest, und nicht die gleiche Frage erneut hier beantworten lassen musst?

        Auch ich fühle mich manchmal so wie dieser "Künstler". Auf meine Frage kommen hier dann so Antworten wie "Nimm lieber Holz statt Stein" (class statt name - das Problem aber bleibt).

        Nein, es kommen Antworten wie „erlerne doch bitte langsam mal die Grundlagen der Techniken, die du einsetzt”.
        Wenn du deinen HTML-Code mal validieren lassen würdest - dann bekämst du dabei schon gesagt, dass du name-Attribute nicht überall nach belieben einsetzen kannst. Und dann müsstest du dich nicht zum wiederholten Male wundern, warum damit das, was du vorhast, nicht „funzt”.

        Ich weiss, dass sie gelesen und be-dacht werden, ich frage also nicht gegen die Wand.

        Nein, aber wenn du jedes Jahr erneut die gleiche Frage stellst, dann habe ich das Gefühl, die *Antworten* gehen vor die Wand.

        MfG ChrisB

        --
        “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
        1. Sie sind, und das stört mich vor allem, redundant.

          Was du dir merken kannst :-o - ich hätte mich nicht daran erinnert.

          Struppi.

      2. Lieber Kalle_B,

        Okay, ich erstelle per PHP einen stinknormalen Veranstaltungskalender.

        aha. Dann muss ich meinen ersten Strukturvorschlag verbessern.

        <ul id="kalender">  
            <dl>  
                <dt class="termin">Termin</dt>  
                <dd class="termin">Dienstag, 01.12.2009, 19:00-22:00</dd>  
          
                <dt class="ort">Ort</dt>  
                <dd class="ort">69469 Weinheim</dd>  
          
                <dt class="treffpunkt">Treffpunkt</dt>  
                <dd class="treffpunkt">Café 45 im OEG-Bahnhof</dd>  
          
                <dt class="veranstalter">Veranstalter</dt>  
                <dd class="veranstalter">  
                    <a class="klickbild" href="#">  
                        <img src="..." alt="Klickbild für diesen Termin" />  
                    </a>  
                    <a class="external" href="#">DIE LINKE. Ortsverein Weinheim</a>  
                    <a href="#">Übersicht Veranstalter</a>  
                </dd>  
            </dl>  
        </ul>
        

        Den möchte ich nun drucken als aufklappbare Visitenkarte.

        Ist das wirklich eine Aufgabe für JavaScript? Das klingt mir eigentlich eher nach CSS...

        Der Link veranlasste meinen FF3.5.5 zum Nachfragen, ob das aktuelle Script weiterhin ausgeführt werden solle. Gibt es einen plausiblen Grund, warum das so lange dauert?

        Nun möchte ich noch eine Statistik drucken. Da Javascript die Termine "verteilt", kann es sie auch zählen. Aber wie können Städtenamen erkannt werden?

        Warum steht die Statistik nicht vom PHP-Script bereits in die Seite geschrieben? Mittels passender CSS-Gestaltung kann man das für den Bildschirm unsichtbar machen, um es aber mit dem Print-Stylesheet doch auszudrucken.

        Ansonsten müsste man die passenden Elemente anhand ihrer className-Eigenschaft prüfen und dann die Werte von der PLZ bereinigen. Dann kann man die Städtenamen filtern - passender (semantischer) HTML-Code vorausgesetzt.

        Ich möchte euch einfach mal DANKE sagen für das aktive Lesen.

        Gerne! Man lernt dadurch ja immer wieder dazu.

        Liebe Grüße,

        Felix Riesterer.

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

          aha. Dann muss ich meinen ersten Strukturvorschlag verbessern.

          Dann tu das bitte auch.

          <ul id="kalender">

          <dl>

            
          beeeeep. ul darf nur li enthalten.  
            
          cu,  
          Andreas
          
          -- 
          [Warum nennt sich Andreas hier MudGuard?](http://MudGuard.de/)  
          [O o ostern ...](http://ostereier.andreas-waechter.de/)  
            
          Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.  
          
          
          1. Lieber MudGuard,

            <ul id="kalender">

            <dl>

            
            >   
            > beeeeep. ul darf nur li enthalten.  
              
            wie PEINLICH!! Ich hatte in der Eile vergessen, die <dl> in ein <li>-Element zu verpacken. Also Korrektur (der "Korrektur"):  
              
            ~~~html
            <ul id="kalender">  
                <li>  
                    <dl>  
                        <dt class="termin">Termin</dt>  
                        <dd class="termin">Dienstag, 01.12.2009, 19:00-22:00</dd>  
              
                        <dt class="ort">Ort</dt>  
                        <dd class="ort">69469 Weinheim</dd>  
              
                        <dt class="treffpunkt">Treffpunkt</dt>  
                        <dd class="treffpunkt">Café 45 im OEG-Bahnhof</dd>  
              
                        <dt class="veranstalter">Veranstalter</dt>  
                        <dd class="veranstalter">  
                            <a class="klickbild" href="#">  
                                <img src="..." alt="Klickbild für diesen Termin" />  
                            </a>  
                            <a class="external" href="#">DIE LINKE. Ortsverein Weinheim</a>  
                            <a href="#">Übersicht Veranstalter</a>  
                        </dd>  
                    </dl>  
                </li>  
                <li><dl>{nächster Termin}</dl></li>  
            </ul>
            

            Ob es die übergeordnete <ul> überhaupt braucht, oder ob man die Menge an einzelnen <dl>s auch so im Dokument haben kann/möchte, bliebe noch zu entscheiden.

            Liebe Grüße,

            Felix Riesterer.

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

        Du bist janz normal. Nun mal so nebenbei: Ne Ju52 kommt hier ab und an mal aus der Schweiz rübergeflogen und roten Granit findest Du nicht im Odenwald sondern in der Lausitz.

        Weitermachen,
        Hotti