Robert : Aus JavaScript auf DOM zugreifen

Sowas klappt:

<html>
    <head>
      <script type="text/javascript">
        function aufruf()
        {
            var wert = document.Formular.zielsammlung.value;
            alert(wert);
        }
      </script>
    </head>
    <body>
      <form name="Formular" action="">
        <input name="zielsammlung" type="hidden" value="Collection-10" />
        <input type="button" value="aufrufen" onclick="aufruf()">
      </form
    </body>
</html>

sowas nicht:

<html>
    <head>
      <script type="text/javascript">
        function aufruf()
        {
            var wert = document.zielsammlung.value;
            alert(wert);
        }
      </script>
    </head>
    <body>
        <input name="zielsammlung" type="hidden" value="Collection-10" />
        <input type="button" value="aufrufen" onclick="aufruf()">
    </body>
</html>

Könnt ihr mir sagen warum das nicht klappt? Ich will kein Formular wie im ersten Beispiel verwenden.

  1. Hi,

    var wert = document.zielsammlung.value;

    Stattdessen:

    var wert=document.getElementsByName("zielsammlung")[0].value;

    Jedenfalls sofern der Browser DOM unterstützt (JS >= 1.5).

    Gruß, Cybaer

    --
    Man kann doch sehr leicht jenen tugendhaften Menschen begegnen, (...) die eine Art "unkrümmbaren Zeigefinger" besitzen, der ständig den kalten Wind des Rechthabens ausströmt. (Wolfgang Huber, Bischof)
    Die Tugend jagt nicht den Teufel, sondern den Sündhaften. Damit wird sie zum Terror. (Hans-Ulrich Jörges, Journalist)
    1. Hallo,

      Bin da eben auf eine Funktion gestoßen, die angeblich so gut wie jedes Element anhand eines übergebenen id - oder name-Attributs zurückgeben kann. Die will ich euch nicht vorenthalten:

        
      function MWJ_findObj( oName, oFrame, oDoc ) {  
        /* if not working on a layer, document should be set to the  
        document of the working frame  
        if the working frame is not set, use the window object  
        of the current document  
        WARNING: - cross frame scripting will cause errors if  
        your page is in a frameset from a different domain */  
        if( !oDoc ) { if( oFrame ) { oDoc = oFrame.document; } else { oDoc = window.document; } }  
        
        //check for images, forms, layers  
        if( oDoc[oName] ) { return oDoc[oName]; }  
        
        //check for pDOM layers  
        if( oDoc.all && oDoc.all[oName] ) { return oDoc.all[oName]; }  
        
        //check for DOM layers  
        if( oDoc.getElementById && oDoc.getElementById(oName) ) {  
          return oDoc.getElementById(oName); }  
        
        //check for form elements  
        for( var x = 0; x < oDoc.forms.length; x++ ) {  
          if( oDoc.forms[x][oName] ) { return oDoc.forms[x][oName]; } }  
        
        //check for anchor elements  
        //NOTE: only anchor properties will be available,  
        //NOT link properties (in layers browsers)  
        for( var x = 0; x < oDoc.anchors.length; x++ ) {  
          if( oDoc.anchors[x].name == oName ) {  
            return oDoc.anchors[x]; } }  
        
        //check for any of the above within a layer in layers browsers  
        for( var x = 0; document.layers && x < oDoc.layers.length; x++ ) {  
          var theOb = MWJ_findObj( oName, null, oDoc.layers[x].document );  
            if( theOb ) { return theOb; } }  
        
        //check for frames, variables or functions  
        if( !oFrame && window[oName] ) { return window[oName]; }  
        if( oFrame && oFrame[oName] ) { return oFrame[oName]; }  
        
        //if checking through frames, check for any of the above within  
        //each child frame  
        for( var x = 0; oFrame && oFrame.frames && x < oFrame.frames.length; x++ ) {  
          var theOb = MWJ_findObj( oName, oFrame.frames[x], oFrame.frames[x].document ); if( theOb ) { return theOb; } }  
        
        return null;  
      }
      

      Man übergibt einfach als Parameter oName einen id- oder name-Wert.
      Das Ding soll Cross-Browser-tauglich sein (Stand Januar 2008) und sogar mehrere Frames eines frameset durchforsten können. Dazu gibt man als oFrame einfach den frame-Namen an, ab dem die Frame-Hierarchie nach unten durchgecheckt werden soll.

      Ist vielleicht etwas zuviel Overhead für umfangreiche Projekte, aber um mal eben etwas zu coden oder bzw. testen scheint mir das Ding ideal. Man braucht sich erst einmal keine Gedanken um den richtigen Aufruf der richtigen Methoden für alle möglichen Elemente zu machen, wenn es denn funktioniert.

      Habe es nämlich noch nicht getestet. Viel Spass damit!

      Gruß, Don P

      1. Hi,

        Ist vielleicht etwas zuviel Overhead für umfangreiche Projekte,

        Mit Spatzen auf Kanonen geschissen, wuerde ich sagen.

        aber um mal eben etwas zu coden oder bzw. testen scheint mir das Ding ideal.

        Zu welchem Zweck?

        Man braucht sich erst einmal keine Gedanken um den richtigen Aufruf der richtigen Methoden für alle möglichen Elemente zu machen, wenn es denn funktioniert.

        Wenn man sich schon beim Entwicklen und Testen keine *Gedanken* mehr machen will - dann sollte man es vielleicht lieber gleich ganz sein lassen.

        Ernsthaft, ich kann auf Anhieb keinerlei sinnvollen Nutzen in dieser absolut aufgeblaehten Funktion erkennen - weder im produktiven noch im Test-Einsatz.

        MfG ChrisB

        1. Hallo,

          Ernsthaft, ich kann auf Anhieb keinerlei sinnvollen Nutzen in dieser absolut aufgeblaehten Funktion erkennen - weder im produktiven noch im Test-Einsatz.

          Dann hast du keine Fantasie[tm].

          Es gibt bekanntlich Programmierer (das Fußvolk bzw. der Polier beim Bau) und Entwickler (die Architekten), soll doch das Fußvolk die Detailarbeit machen und optimieren... :-))

          Diese Funktion ist was für Architekten: Um eine Idee, d.h. Funktionalität mal kurz umzusetzen um die praktisch Brauchbarkeit zu testen, oder auch für kleinere Projekte, wo der Overhead nicht stört, wenn's mal schnell gehen soll mit dem coden, oder einfach nur, um zu lernen, wie man es am besten Crossbrowser-mässig hinbekommt, ohne hier rumzufragen...

          Gruß, Don P

        2. Hallo,

          Ist vielleicht etwas zuviel Overhead für umfangreiche Projekte,

          Mit Spatzen auf Kanonen geschissen, wuerde ich sagen.

          Wohl eher Perlen vor die Säue geworfen, wie es scheint. *SCNR*

          Welche Laus ist dir denn heute über die Leber gelaufen? Im anderen aktuellen Thread teilst du ja gerade *nur* kräftig aus, ohne dem armen OP im geringsten zu helfen. Hol' dir doch ein Bier und komm' zurück auf den Teppich, Mensch. Ich geh' jetzt jedenfalls noch einen saufen :-))

          Gruß, Don P

          1. Hi,

            Welche Laus ist dir denn heute über die Leber gelaufen?

            Wieso?

            Ich halte die vorgestellte Funktion fuer hoechst sinnfrei, auf Grund ihrer Aufgeblaehtheit fuer praktisch kaum einsetzbar - und fuer's Testen von irgendwas bzgl. DOM-Struktur & Co. gibt's bessere Hilfsmittel wie FireBug etc.

            Im anderen aktuellen Thread teilst du ja gerade *nur* kräftig aus, ohne dem armen OP im geringsten zu helfen.

            Wie meinen, wo meinen?

            Hol' dir doch ein Bier

            In deiner Zeitzone mag Abend sein, aber glaub' mir, hier ist noch reichlich frueh fuer ein Bier ...

            MfG ChrisB

            1. Moin.

              In deiner Zeitzone mag Abend sein, aber glaub' mir, hier ist noch reichlich frueh fuer ein Bier ...

              Interesanterweise liefert eine Google-Suche nach diesem Satz derzeit nur zwei Treffer.

              Das schreit förmlich nach geeigneten Maßnahmen. Hiermich prophezeie ich, dass sich dieses Ergebnis bald mindestens ver-3/2-facht haben wird!

              Christoph

      2. Hallo,

        Bin da eben auf eine Funktion gestoßen, die angeblich so gut wie jedes Element anhand eines übergebenen id - oder name-Attributs zurückgeben kann.

        Allgemein würde ich empfehlen, direkte Ansprechweisen zu erlernen und die zu verwenden. Wenn man nicht abwärtskompatibel schreiben muss, deckt getElementById das meiste ab. Es gibt ja nichts einfacheres als die Grundregel, einem Element eine ID zu verpassen und es darüber anzusprechen.

        Ansprechen über name ist m.M.n. weder nötig noch sinnvoll, Formularfelder sind da vielleicht eine Ausnahme, weil document.forms.name.elements.name recht sprechend ist. Ansonsten: One getElementById to rule them all!

        Das Script stammt aus Prä-DOM-Zeiten und das meiste ist einfach nicht mehr nötig. Sowas ist auch einfach problematisch:

        //check for frames, variables or functions
          if( !oFrame && window[oName] ) { return window[oName]; }

        Das liefert mir im Zweifelsfall keine Elemente zurück, sondern irgendwelche Objekte im globalen Scope... Aber das ist auch nett:

        //check for images, forms, layers
        if( oDoc[oName] ) { return oDoc[oName]; }

        window.document hat ohne Bilder und Formulare ca. 145 Member, keines davon ist ein Element mit einer bestimmten ID.

        Dass das Script in allen Fensterobjekten sucht, die es nur zu fassen kriegt, halte ich auch eher für einen Nachteil. Wenn man Funktionen wie gibmirirgendwasirgendwomitdemnamen("bla") nutzt, ist der Code unverständlich, unzuverlässig und Fehlersuche unmöglich.

        Das Ding soll Cross-Browser-tauglich sein (Stand Januar 2008)

        Eher Stand 2001. ;)

        Man braucht sich erst einmal keine Gedanken um den richtigen Aufruf der richtigen Methoden für alle möglichen Elemente zu machen, wenn es denn funktioniert.

        Es gibt realistischerweise diese Fälle:
        Gib mir ein Element mit einer ID,
        gibt mir ein Formular mit einem Namen (wobei man heuzutage auch einfach IDs vergeben kann),
        gibt mir ein Frame mit einem Namen, darin dann ein Element, siehe oben.

        Ich muss mir also keine großen Gedanken machen, sondern zweieinhalb Ansprechweisen kennen und kann dann auch eindeutigen (!) Code schreiben, bei dem ganz klar ist, was ich bekomme (oder nicht bekomme, wenn das, was ich genau suche, nicht da ist oder ich nicht darauf zugreifen kann).

        Mathias

        1. Hi,

          Ansprechen über name ist m.M.n. weder nötig noch sinnvoll, Formularfelder sind da vielleicht eine Ausnahme,

          Auch bei Bildern ist die Ansprache über den Namen durchaus praktisch, da man mit einem Namen mehrere Bilder gleichzeitig ansprechen kann. Bei Links  vielleicht auch, aber praktisch hatte ich dafür, im Gegensatz zu Bildern, noch keine Verwendung.

          Auch die neuere Form via getElementsByClassName() finde ich daher sehr brauchbar - se wird sich IMHO auf breiter Front durchsetzen, sobald die Browser mit einer solchen nativen Methode ausgestattet sein werden ...

          Gruß, Cybaer

          --
          Man kann doch sehr leicht jenen tugendhaften Menschen begegnen, (...) die eine Art "unkrümmbaren Zeigefinger" besitzen, der ständig den kalten Wind des Rechthabens ausströmt. (Wolfgang Huber, Bischof)
          Die Tugend jagt nicht den Teufel, sondern den Sündhaften. Damit wird sie zum Terror. (Hans-Ulrich Jörges, Journalist)
          1. @@Cybaer:

            Auch die neuere Form via getElementsByClassName() finde ich daher sehr brauchbar

            Wozu??

            se wird sich IMHO auf breiter Front durchsetzen, sobald die Browser mit einer solchen nativen Methode ausgestattet sein werden ...

            Dann werden Scriptautoren gar nicht mehr auf die Idee kommen, einfach nur className eines übergeorneten Elements umzuschalten und den CSS-Selekor für Nachfahren zu bemühen? Möglich, aber bedauerlich.

            Live long and prosper,
            Gunnar

            --
            „Das Internet ist ein großer Misthaufen, in dem man allerdings auch kleine Schätze und Perlen finden kann.“ (Joseph Weizenbaum)
            1. Hi,

              Auch die neuere Form via getElementsByClassName() finde ich daher sehr brauchbar
              Wozu??

              Für das gleiche, wofür jetzt auch ein gleicher NAME sinnvoll ist - nur eben für alle Elemente! :-)))

              Dann werden Scriptautoren gar nicht mehr auf die Idee kommen, einfach nur className eines übergeorneten Elements umzuschalten und den CSS-Selekor für Nachfahren zu bemühen? Möglich, aber bedauerlich.

              Leider schon öfters konstatiert: Mangel an Phantasie! Der Wunsch, mehrere Elemente einheitlich zu behandeln/einer Klasse zuzuordnen hat per se *nichts* mit CSS zu tun.

              CSS nutzt die Klassensystematik auch - fein. Aber die Klassensystematik ist nicht nur für CSS sinnvoll oder gar explizit dafür gedacht.

              Klassisches Beispiel (ich deutete es molily bereits an) ist z.B., wenn man mehrere Bilder gleichen Namens (oder zukünftig: der gleichen Klasse) in einem Rutsch ersetzen möchte.

              Der Programmierer-Phantasie ist dort, wie oft, keine Grenze gesetzt - jedenfalls bei hinreichend vielen Programmieren mit (z.T. ggf. recht unterschiedlicher) Phantasie ...

              Gruß, Cybaer

              --
              Man kann doch sehr leicht jenen tugendhaften Menschen begegnen, (...) die eine Art "unkrümmbaren Zeigefinger" besitzen, der ständig den kalten Wind des Rechthabens ausströmt. (Wolfgang Huber, Bischof)
              Die Tugend jagt nicht den Teufel, sondern den Sündhaften. Damit wird sie zum Terror. (Hans-Ulrich Jörges, Journalist)
          2. Hoi,

            Auch bei Bildern ist die Ansprache über den Namen durchaus praktisch, da man mit einem Namen mehrere Bilder gleichzeitig ansprechen kann.

            document.images.name liefert aber immer nur ein Bild, da bräuchte man schon getElementsByName.

            Auch die neuere Form via getElementsByClassName() finde ich daher sehr brauchbar - se wird sich IMHO auf breiter Front durchsetzen, sobald die Browser mit einer solchen nativen Methode ausgestattet sein werden ...

            Klar, viele weitere Ansprechweisen sind nützlich, was JavaScript-Bibliotheken halt mit $("CSS- oder XPath-Selektor") möglich machen. Ich bezog mich darauf, was mit der geposteten Funktion möglich und was davon sinnvoll ist.

            Mathias

            1. Hi,

              document.images.name liefert aber immer nur ein Bild, da bräuchte man schon getElementsByName.

              Mitnichten.

              document.images["example"] liefert seit je her *entweder* das IMG-Element mit Namen "example" *oder* eine *Collection* aller IMGs mit Namen "example".

              Gruß, Cybaer

              --
              Man kann doch sehr leicht jenen tugendhaften Menschen begegnen, (...) die eine Art "unkrümmbaren Zeigefinger" besitzen, der ständig den kalten Wind des Rechthabens ausströmt. (Wolfgang Huber, Bischof)
              Die Tugend jagt nicht den Teufel, sondern den Sündhaften. Damit wird sie zum Terror. (Hans-Ulrich Jörges, Journalist)
              1. Hallo,

                document.images["example"] liefert seit je her *entweder* das IMG-Element mit Namen "example" *oder* eine *Collection* aller IMGs mit Namen "example".

                Bevor ich das behauptet habe, habe ich Tests in Opera und Firefox gemacht.

                <img src="a.png" name="bla">
                <img src="b.png" name="bla">
                <script>
                alert(document.images.bla.constructor === HTMLImageElement);
                </script>

                Da bekomme ich nur ein Element, und zwar das erste. Nix mit Collection. So ist document.images in DOM HTML auch definiert. document.images.namedItem("bla") gibt immer nur einen Node zurück. Wo das »seit je her« anders sein soll, weiß ich nicht. Ich bin aber auch nicht retro, sondern mache gerne das DOM zur Voraussetzung. ;)

                Mathias

                1. Hi,

                  Bevor ich das behauptet habe, habe ich Tests in Opera und Firefox gemacht.

                  Ich mußte nichts testen, ich wende es an! Seit je her. Und ich kenne keinen Browser (der je unter meinen Fingern war), der hier nicht wie von mir beschrieben reagiert.

                  Kein IE, kein Opera, kein Navigator, kein Mozilla, kein Safari, kein Konqueror. Beim Rest der Browserwelt passe ich.

                  Das gleiche gilt natürlich auch für andere Elemente mit Namen (Formulare/Formelemente und Anker)!

                  Hast Du schonmal ohne das moderne getElementsByName() sondern mit dem alten elements[] alle Radio-Inputs (eines Names) durchlaufen? Wann hast Du denn mit der JS-Programmierung angefangen? Erst mit dem Mozilla und DOM-Level 2? =:-o *Überleg* dir einfach mal, wozu JS hauptsächlich gedacht war, und *rekapitulier* deine Überlegungen mal nicht mit IMGs gleichen Namens, sondern mit INPUTs vom Typ "radio" mit (systemimmanent) gleichem Namen.

                  Wenn Du testen möchtest, nimm die von mir genannte Syntax! namedItem ist hier nicht zielführend ...

                  Gruß, Cybaer

                  --
                  Man kann doch sehr leicht jenen tugendhaften Menschen begegnen, (...) die eine Art "unkrümmbaren Zeigefinger" besitzen, der ständig den kalten Wind des Rechthabens ausströmt. (Wolfgang Huber, Bischof)
                  Die Tugend jagt nicht den Teufel, sondern den Sündhaften. Damit wird sie zum Terror. (Hans-Ulrich Jörges, Journalist)
                  1. Bevor ich das behauptet habe, habe ich Tests in Opera und Firefox gemacht.

                    Ich mußte nichts testen, ich wende es an! Seit je her. Und ich kenne keinen Browser (der je unter meinen Fingern war), der hier nicht wie von mir beschrieben reagiert.

                    Es geht nur, wenn man document['name'] verwendet, document.images.name liefert keine Collection.

                    Struppi.

                    1. Hallo,

                      Es geht nur, wenn man document['name'] verwendet, document.images.name liefert keine Collection.

                      Ah, okay, gut zu wissen.

                      Mathias

                    2. Hi,

                      Es geht nur, wenn man document['name'] verwendet, document.images.name liefert keine Collection.

                      Richtig.

                      Aber: Ich muß trotzdem Abbitte leisten! :-/ Gerade habe ich in meine Sourcen geschaut, und ich durchlaufe immer die Collection *komplett* selbst und überprüfe dann mit name, ob der Name (und damit das Element) paßt! =:-> (s. z.B. Mehrere Bilder bei MouseOver auswechseln).

                      Eine "maßgeschneiderte" Collectin wird mir in DOM-Level 0 also doch *nicht* zur Verfügung gestellt.

                      Das kommt davon, wenn man sich für alles Helferscripte programmiert ... >;->

                      Gruß, Cybaer

                      --
                      Man kann doch sehr leicht jenen tugendhaften Menschen begegnen, (...) die eine Art "unkrümmbaren Zeigefinger" besitzen, der ständig den kalten Wind des Rechthabens ausströmt. (Wolfgang Huber, Bischof)
                      Die Tugend jagt nicht den Teufel, sondern den Sündhaften. Damit wird sie zum Terror. (Hans-Ulrich Jörges, Journalist)
                  2. Hallo,

                    Ich mußte nichts testen, ich wende es an! Seit je her.

                    Gut, auf die von Struppi besagte Art, die hat mein Test natürlich nicht abgedeckt, weil du erst document.images["name"] sagtest.

                    Hast Du schonmal ohne das moderne getElementsByName() sondern mit dem alten elements[] alle Radio-Inputs (eines Names) durchlaufen?

                    getElementByTagName vermeide ich eigentlich immer, meistens nehme ich document.forms.name.elements.name.

                    Wann hast Du denn mit der JS-Programmierung angefangen?

                    1999

                    *Überleg* dir einfach mal, wozu JS hauptsächlich gedacht war

                    Weiß nich, vielleicht Werbe-Popups? ;)

                    und *rekapitulier* deine Überlegungen mal nicht mit IMGs gleichen Namens, sondern mit INPUTs vom Typ "radio" mit (systemimmanent) gleichem Namen.

                    Gut, dass elements.name eine Collection liefern kann, ist mir bewusst.

                    Mathias

                    1. Hi,

                      *Überleg* dir einfach mal, wozu JS hauptsächlich gedacht war
                      Weiß nich, vielleicht Werbe-Popups? ;)

                      Hetzbacke! >;->

                      Gruß, Cybaer

                      --
                      Man kann doch sehr leicht jenen tugendhaften Menschen begegnen, (...) die eine Art "unkrümmbaren Zeigefinger" besitzen, der ständig den kalten Wind des Rechthabens ausströmt. (Wolfgang Huber, Bischof)
                      Die Tugend jagt nicht den Teufel, sondern den Sündhaften. Damit wird sie zum Terror. (Hans-Ulrich Jörges, Journalist)
          3. Hallo,

            Auch die neuere Form via getElementsByClassName() finde ich daher sehr brauchbar

            Dank des Wunders der Demokratie heissen diese Methoden in Zukunft übrigens querySelector and querySelectorAll. Wenigstens hat sich keiner direkt für diese Wahl entschieden; das sind nur die Bezeichnungen, die am wenigstens abgelehnt wurden.

            Tim

            1. Hi,

              Dank des Wunders der Demokratie heissen diese Methoden in Zukunft übrigens querySelector and querySelectorAll.

              Ich fange an, Putin zu verstehen! >;-/

              Wenigstens hat sich keiner direkt für diese Wahl entschieden; das sind nur die Bezeichnungen, die am wenigstens abgelehnt wurden.

              Also, angesichts der Wahlbeteiligung, auch nicht viel anders als bei hiesigen Bundestags- und sonstigen Wahlen ... >;->

              Gruß, Cybaer

              --
              Man kann doch sehr leicht jenen tugendhaften Menschen begegnen, (...) die eine Art "unkrümmbaren Zeigefinger" besitzen, der ständig den kalten Wind des Rechthabens ausströmt. (Wolfgang Huber, Bischof)
              Die Tugend jagt nicht den Teufel, sondern den Sündhaften. Damit wird sie zum Terror. (Hans-Ulrich Jörges, Journalist)
      3. Hi,

        Bin da eben auf eine Funktion gestoßen, die angeblich so gut wie jedes Element anhand eines übergebenen id - oder name-Attributs zurückgeben kann.

        Ich verwende, für mehrere Anwendungsfälle, eine ähnliche Funktion, um ein object/id/name/tagname zu finden: getObject()

        Gruß, Cybaer

        --
        Man kann doch sehr leicht jenen tugendhaften Menschen begegnen, (...) die eine Art "unkrümmbaren Zeigefinger" besitzen, der ständig den kalten Wind des Rechthabens ausströmt. (Wolfgang Huber, Bischof)
        Die Tugend jagt nicht den Teufel, sondern den Sündhaften. Damit wird sie zum Terror. (Hans-Ulrich Jörges, Journalist)
        1. @@Cybaer:

          Ich verwende, für mehrere Anwendungsfälle, eine ähnliche Funktion, um ein object/id/name/tagname zu finden:

          Du bist ja für deine Spatzenkanonen bekannt. >;->

          Live long and prosper,
          Gunnar

          --
          „Das Internet ist ein großer Misthaufen, in dem man allerdings auch kleine Schätze und Perlen finden kann.“ (Joseph Weizenbaum)
          1. Hi,

            Du bist ja für deine Spatzenkanonen bekannt. >;->

            :) Das relativiert sich schnell, wenn man Heerführer ist! ;->

            Gruß, Cybaer

            --
            Man kann doch sehr leicht jenen tugendhaften Menschen begegnen, (...) die eine Art "unkrümmbaren Zeigefinger" besitzen, der ständig den kalten Wind des Rechthabens ausströmt. (Wolfgang Huber, Bischof)
            Die Tugend jagt nicht den Teufel, sondern den Sündhaften. Damit wird sie zum Terror. (Hans-Ulrich Jörges, Journalist)
        2. Hallo,

          Ich verwende, für mehrere Anwendungsfälle, eine ähnliche Funktion, um ein object/id/name/tagname zu finden: getObject()

          Wozu brauche ich eine Funktion, die mir ein Element mit einer ID ODER mit einem Namen ODER mit einem Tag-Namen zurückgibt, je nachdem, was gerade existiert? Das ist doch willkürlich, da weiß ich nie, was herauskommt. Da muss ich voll aufpassen, dass Namen nicht wie IDs heißen und IDs nicht wie Tagnamen, sonst bekomme ich z.B. statt dem head-Element ein Element mit id=head. Ich will Scripte auf lebendigen Sites einsetzen können, wo im Markup alles mögliche passieren kann, aber die Scripte weiter funktionieren, solange ganz bestimmte (!) Hooks im Markup vorhanden sind. Wenn ich bloß getObject("bla") schreibe, explodiert das ganze bei der nächsten Gelegenheit, wenn jemand am Markup herumfummelt und nicht beachtet, dass er nicht einfach Bezeichner/Tags nach Gusto verwenden darf. Das ist so ziemlich das Gegenteil von dem, was ich mir unter robust und zukunftsfähig vorstelle.

          Es ist doch semantisch was ganz anderes, wenn ich in meinem Code getElementById() oder getElementsByTagName()[index] schreibe. Das würde ich doch nie verwischen und einebnen wollen, wer soll den Code dann noch lesen können? Ich sehe ja ein, dass Helferfunktionen zum Auswählen von Elementen ultranützlich sind und nervige Schreibarbeit sparen, aber dann doch eher was in der Art $("CSS-Selektor"). Damit kann man Elemente eindeutig auswählen - und im Fehlerfall wird eben nicht geschaut, ob doch noch irgendwo ein Element existiert, das irgendwie diesen Bezeichner trägt, sondern ich bekomme ein klares undefined o.ä.

          Mathias

          1. Hi,

            Wozu brauche ich eine Funktion, die mir ein Element mit einer ID ODER mit einem Namen ODER mit einem Tag-Namen zurückgibt,

            Der Einfachheit halber.

            Da muss ich voll aufpassen, dass Namen nicht wie IDs heißen und IDs nicht wie Tagnamen,

            Ehrlich gesagt: Ich käme nie auf die Idee, IDs zu verwenden, die wie Tags heißen (oder Variablennamen zu verwenden, die wie Methoden heißen, oder ...).

            Das war schon vorher so, und ...

            sonst bekomme ich z.B. statt dem head-Element ein Element mit id=head.

            ... entsprechend würde ich immer id=header o.ä. verwenden - prinzipiell.

            Ansonsten:
            1. Das dürfte recht rasch auffallen
            2. Man kann getObject() als Parameter mitgeben, was er suchen soll. Wer also unbedingt id=head verwenden möchte, der kann auch nur nach IDs suchen.

            Davon abgesehen: IDs haben per Default eine höhere Priorität als Tags. D.h., solange überhaupt ein Element mit der ID "head" existiert, solange wird das Element HEAD ohnehin nicht gefunden werden.

            Es ist doch semantisch was ganz anderes, wenn ich in meinem Code getElementById() oder getElementsByTagName()[index] schreibe. Das würde ich doch nie verwischen und einebnen wollen,

            :) Wenn doch, würdet Du vielleicht als IE-Programmierer anheuern. ;->

            aber dann doch eher was in der Art $("CSS-Selektor").

            Alles zu seiner Zeit. Sowas verwende ich ja auch (cssQuery()). :)

            Damit kann man Elemente eindeutig auswählen - und im Fehlerfall wird eben nicht geschaut, ob doch noch irgendwo ein Element existiert, das irgendwie diesen Bezeichner trägt, sondern ich bekomme ein klares undefined o.ä.

            Welche Methode ich verwende (getObject(), cssQuery(), getElementById(), getElementsByClassName(), etc.) hängt bei mir *einzig* vom *konkreten* Fall ab. In der Summe benutze ich alles.

            Ich würde nicht sagen, nimm immer dies oder laß generell das. Da fühl ich mich sehr frei ... :-)

            Gruß, Cybaer

            --
            Man kann doch sehr leicht jenen tugendhaften Menschen begegnen, (...) die eine Art "unkrümmbaren Zeigefinger" besitzen, der ständig den kalten Wind des Rechthabens ausströmt. (Wolfgang Huber, Bischof)
            Die Tugend jagt nicht den Teufel, sondern den Sündhaften. Damit wird sie zum Terror. (Hans-Ulrich Jörges, Journalist)
            1. Hi,

              Ehrlich gesagt: Ich käme nie auf die Idee, IDs zu verwenden, die wie Tags heißen (oder Variablennamen zu verwenden, die wie Methoden heißen, oder ...).

              Du vielleicht nicht, aber evtl. dein Kollege der in deinem Code einen Hotfix einpflegen muss weil du eben gerade nicht da bist ...

              So eine Funktion mag praktisch sein, aber wehe sie verhaelt sich nicht wie man es erwartet, und liefert eben das falsche Element zurueck, dann steht dir eine lange Fehlersuche/Korrektur bevor.

              Zugegeben, praktisch, aber evtl. nicht praktikabel.

              1. Hi,

                So eine Funktion mag praktisch sein, aber wehe sie verhaelt sich nicht wie man es erwartet

                Expect the unexpected :-)

                MfG ChrisB

                1. [latex]Moin![/latex]

                  So eine Funktion mag praktisch sein, aber wehe sie verhaelt sich nicht wie man es erwartet

                  Expect the unexpected :-)

                  "Nobody expects the Spanish Inquisition!"

                  Cü,

                  Kai

                  --
                  Die kleinen Mädchen aus der Vorstadt tragen heute Nasenringe aus Phosphor
                  Die Lippen sind blau, die Haare grün, Streichholzetiketten am Ohr
                  Aus den Jackentaschen ragen braune Flaschen so sieht man sie durch die Strassen ziehn
                  überall wo sie vorübergehen hängt in der Luft ein Hauch von Benzin
                  ie:{ fl:( br:< va:) ls:? fo:| rl:? n4:° ss:{ de:] js:| ch:? mo:| zu:|]
                  1. Hi,

                    Expect the unexpected :-)
                    "Nobody expects the Spanish Inquisition!"

                    "Poke her with the Soft Cushion! ... Put her in the Comfy Chair!"

                    Gruß, Cybaer

                    --
                    Man kann doch sehr leicht jenen tugendhaften Menschen begegnen, (...) die eine Art "unkrümmbaren Zeigefinger" besitzen, der ständig den kalten Wind des Rechthabens ausströmt. (Wolfgang Huber, Bischof)
                    Die Tugend jagt nicht den Teufel, sondern den Sündhaften. Damit wird sie zum Terror. (Hans-Ulrich Jörges, Journalist)