Michael: Elementknoten mit Id erzeugen

Hallo,

ich versuche gerade verzweifelt einen Knoten mit bestimmter id zu erzeugen, schaffe es aber nicht, die id zu setzen. Hier ein Beispiel:
function test(uebergebeneID)  {
var i = uebergebeneID;
var Element = document.createElement("div");
var einText = document.createTextNode("Ein Text im div");
Element = Element.appendTextNode(einText);
// bis hier ist noch alles gut, aber dann sollte das Attribut kommen und das klappt nicht:

Element.setAttribute("id", i);
}

Kann mir bitte schnell jemand auf die Sprünge helfen, was ich da falsch mache und einen Tipp geben, wie es richtig wäre?
Ich habe mit try-and-error jetzt schon zig Sachen probiert (zb createAttribute(), usw.), aber das hat auch alles nicht geklappt.

Danke schon mal und viele Grüße

Michael

  1. Hallo Michael,

    versuch mal

    element.id=i;

    Gruß, Jürgen

    1. Hallo Jürgen,

      versuch mal

      element.id=i;

      War das Erste, das ich probiert habe, geht aber (komischerweise) nicht.

      Viele Grüße

      Michael

  2. Hallo Michael.

    var i = uebergebeneID;

    Wozu diese überflüssige Zwischenspeicherung?

    var Element = document.createElement("div");
    var einText = document.createTextNode("Ein Text im div");
    Element = Element.appendTextNode(einText);

    Was soll das sein? Eine Methode namens „appendTextNode“ gibt es nicht, sofern du sie nicht deklariert hast.
    Es gibt appendData und appendChild, letzteres benötigst du hier.

    Ich habe mit try-and-error jetzt schon zig Sachen probiert (zb createAttribute(), usw.), aber das hat auch alles nicht geklappt.

    Auch schon folgendes?

    Element.id = uebergebeneID;

    Zur Erklärung: die id-Eigenschaft ist für jedes Element vordefiniert und besteht ab dem Moment der Erstellung eines Elementknotens.

    Könnte es sein, dass du nur im IE testest? Dieser akzeptiert das Setzen von Eigenschaften per setAttribute-Methode nicht, wenn eine einfachere Möglichkeit besteht.

    Einen schönen Sonntag noch.

    Gruß, Ashura

    --
    sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
    mathbr:del.icio.us/ mathbr:w00t/
    1. Hi Ashura,

      Hallo Michael.

      var i = uebergebeneID;

      Wozu diese überflüssige Zwischenspeicherung?

      Pure Tippfaulheit ;-)

      var Element = document.createElement("div");
      var einText = document.createTextNode("Ein Text im div");
      Element = Element.appendTextNode(einText);

      Was soll das sein? Eine Methode namens „appendTextNode“ gibt es nicht, sofern du sie nicht deklariert hast.

      --> sorry, war nur ein Fehler beim abtippen

      Auch schon folgendes?

      Element.id = uebergebeneID;

      Das war das erste, was ich probiert habe. Geht komischerweise auch nicht (IE sagt dazu: Das Objekt unterstützt diese Eigenschaft oder Methode nicht).

      Könnte es sein, dass du nur im IE testest? Dieser akzeptiert das Setzen von Eigenschaften per setAttribute-Methode nicht, wenn eine einfachere Möglichkeit besteht.

      Ja. Reicht auch, wenn es nur auch IE läuft (ist fürs Intranet und da gibts nichts anderes).

      Auch einen schönen Sonntag und viele Grüße

      Grüße

      1. Hallo Michael.

        var i = uebergebeneID;

        Wozu diese überflüssige Zwischenspeicherung?

        Pure Tippfaulheit ;-)

        Dann nimm doch gleich i als Parameter entgegen.

        Das war das erste, was ich probiert habe. Geht komischerweise auch nicht (IE sagt dazu: Das Objekt unterstützt diese Eigenschaft oder Methode nicht).

        Die typischen aussagelosen Informationen des IEs, ja.

        Ja. Reicht auch, wenn es nur auch IE läuft (ist fürs Intranet und da gibts nichts anderes).

        Zumindest zum Finden von Fehlern empfehle ich dir wärmstens die Fehlerkonsole des Firefox. Diese *zeigt* dir sogar, was wo erwartet wurde.

        Beispiel:

        function test() {  
          alert('Foo');
        

        Ausgabe Fehlerkonsole:

        Fehler: missing } after function body
        Quelldatei: …
        Zeile: 20, Spalte: 3

        Einen schönen Sonntag noch.

        Gruß, Ashura

        --
        sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
        mathbr:del.icio.us/ mathbr:w00t/
        1. Hallo Ashura,

          Die typischen aussagelosen Informationen des IEs, ja.

          Ja. Ziemlich nervig.

          Zumindest zum Finden von Fehlern empfehle ich dir wärmstens die Fehlerkonsole des Firefox. Diese *zeigt* dir sogar, was wo erwartet wurde.

          Ist mir wohl bekannt.
          "Dummerweise" funktionierts im Firefox und er bringt dann auch keinen Fehler.

          Ich hab es jetzt auch für den IE hinbekommen. Aber kann keinen Grund finden, warum es so jetzt geht und es vorher anders nicht ging.
          (Zudem klappts jetzt sowohl mit Element.id=i wie auch mit setAttribute("id", i)).
          Hier die Änderung die ich gemacht habe, die lediglich darin besteht, dass das Attribut nun gesetzt wird bevor ich den Textknoten einhänge:
          function test(uebergebeneID)  {
          var i = uebergebeneID;
          var Element = document.createElement("div");
          Element.setAttribute("id", i);
          //oder auch: Element.id=i;
          var einText = document.createTextNode("Ein Text im div");
          Element = Element.appendTextNode(einText);
          }

          Hast Du sowas schon mal gesehen? - komische Sachen macht dieser IE - komische Sachen. Spaß beseite, eine Erklärung dafür würde mich brennen interessieren.

          Viele Grüße und nochmal einen schönen Sonntag

          Michael

          1. Hallo Michael

            "Dummerweise" funktionierts im Firefox und er bringt dann auch keinen Fehler.

            Was ich nicht wirklich glauben kann.

            var Element = document.createElement("div");

            Element ist hier "object HTMLDivElement".

            Element = Element.appendTextNode(einText);

            Element ist jetzt "object Text"!

            Spaß beseite, eine Erklärung dafür würde mich brennen interessieren.

            Hast du meine nicht gelesen?

            Du wolltest doch dem Element eine Id geben und nicht dem Text.

            Auf Wiederlesen
            Detlef

            --
            - Wissen ist gut
            - Können ist besser
            - aber das Beste und Interessanteste ist der Weg dahin!
            1. Hallo nochmal,

              Hast du meine nicht gelesen?

              Sorry, habe ich übersehen (für mich ist das Forum immer ein bisschen unübersichtlich, ist mir nämlich schon öfter mal passiert, dass ich was übersehe, wenn jemand später auf einen Post von weiter oben antwortet)

              Du wolltest doch dem Element eine Id geben und nicht dem Text.

              Hab Dir oben geschrieben, dass ich das nicht unbedingt richtig finde.
              Ein Element bleibt ein Element, egal wie viele Kinder es hat. Nur weil ich "Div ein Kind anhänge", muss es doch nicht gleich beleidigt sein ;-)

              Viele Grüße

              Michael

            2. Hallo Detlef, hallo Michael

              @Michael
              Wie Detlef schon gesagt hat, ändert folgende Zeile das Objekt Element

                
              Element = Element.appendTextNode(einText);  
              
              

              (lies dir mal genau folgendes durch: SELFHTML:appendTextNode)

              Dort steht: Die Methode createTextNode() gibt das erzeugte Objekt zurück.

              @Detlef: Du hast schon recht, nur funktioniert es jetzt beim OP, da er ja (in der korrigierten Version) die id zuweist, _bevor_ er den Typ von Element ändert. Übrigens wär ich im Leben nicht drauf gekommen, dass es an dieser ("versteckten") Änderung des Objektes liegen könnte. Respekt!

              liebe Grüße mbr

              1. Hi,

                Element = Element.appendTextNode(einText);

                
                > (lies dir mal genau folgendes durch: [SELFHTML:appendTextNode](http://de.selfhtml.org/javascript/objekte/document.htm#create_text_node))  
                  
                Linktext und Linkziel passen nicht zusammen.  
                  
                
                > Dort steht: Die Methode createTextNode() gibt das erzeugte Objekt zurück.  
                  
                Schön, aber hier irrelevant. Weil ja nicht der Rückgabewert von createTextNode, sondern der von appendTextNode dem Element zugewiesen wird ...  
                Über die Funktion appendTextNode schweigt sich SELFHTML aus. Aber selbst wenn appendChild gemeint sein sollte, hüllt sich SELFHTML bezüglich des Rückgabewerts in Schweigen.  
                  
                cu,  
                Andreas
                
                -- 
                [Warum nennt sich Andreas hier MudGuard?](http://www.Mud-Guard.de/)  
                [Schreinerei Waechter](http://www.schreinerei-waechter.de/)  
                [O o ostern ...](http://ostereier.andreas-waechter.de/)  
                Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.  
                
                
                1. Hallo Andreas

                  Über die Funktion appendTextNode schweigt sich SELFHTML aus.

                  Die war auch nie gemeint: "sorry, war nur ein Fehler beim abtippen"

                  Aber selbst wenn appendChild gemeint sein sollte, hüllt sich SELFHTML bezüglich des Rückgabewerts in Schweigen.

                  Ja, wann und wer benutzt auch den Rückgabewert?
                  Beim W3C steht auch etwas dazu:

                  Return Value

                  Node The node added.

                  Auf Wiederlesen
                  Detlef

                  --
                  - Wissen ist gut
                  - Können ist besser
                  - aber das Beste und Interessanteste ist der Weg dahin!
                2. Hallo MudGuard,

                  (lies dir mal genau folgendes durch: SELFHTML:appendTextNode)

                  Linktext und Linkziel passen nicht zusammen.

                  Danke für die Korrektur - da hab ich wohl Schmarrn erzählt :-)

                  Aber noch  eine andere Frage: nachdem sich ja nun SELFHTM über appendTextNode ausschweigt: Hast du evtl. einen link auf eine Seite
                  mit einer Übersicht aller Javascript Objekte und Objekt-Methoden? Ich hab mal (zugegebenerweise etwas halbherzig) gegoogelt, aber nichts vernünftiges gefunden.

                  Liebe Grüße mbr

                  1. Hallo mbr.

                    Hast du evtl. einen link auf eine Seite
                    mit einer Übersicht aller Javascript Objekte und Objekt-Methoden? Ich hab mal (zugegebenerweise etwas halbherzig) gegoogelt, aber nichts vernünftiges gefunden.

                    Man möge mein Posting lesen.

                    Einen schönen Dienstag noch.

                    Gruß, Ashura

                    --
                    sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
                    mathbr:del.icio.us/ mathbr:w00t/
              2. Hallo mbr

                @Detlef: Du hast schon recht, nur funktioniert es jetzt beim OP, da er ja (in der korrigierten Version) die id zuweist, _bevor_ er den Typ von Element ändert.

                Wirklich?
                Ich frage mich nur, wie er anschließend sein Divobject mit der zugewiesenen
                Id ins DOM einhängen will, wenn er keine Referenz mehr darauf hat.

                Übrigens wär ich im Leben nicht drauf gekommen, dass es an dieser ("versteckten") Änderung des Objektes liegen könnte. Respekt!

                Wieso versteckt?
                Er weist "Element" doch deutlich den Rückgabewert der Objektmethode zu.
                Warum sollte der "Element" danach immer noch eine Referenz auf das Objekt
                selbst sein?
                Gut, wäre möglich, aber nicht wahrscheinlich.
                (Ich habe bisher nichts über den Rückgabewert von appendChild() gefunden.)
                Auf jeden Fall muss ich davon ausgehen, dass sich der Inhalt von "Element"
                dadurch ändert, also lasse ich mir den Inhalt anzeigen.

                Auf Wiederlesen
                Detlef

                --
                - Wissen ist gut
                - Können ist besser
                - aber das Beste und Interessanteste ist der Weg dahin!
                1. Hallo Detlef.

                  (Ich habe bisher nichts über den Rückgabewert von appendChild() gefunden.)

                  Ähm:

                  Return Value

                  Node The node added.

                  Einen schönen Montag noch.

                  Gruß, Ashura

                  --
                  sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
                  mathbr:del.icio.us/ mathbr:w00t/
  3. Hallo Michael

    ich versuche gerade verzweifelt einen Knoten mit bestimmter id zu erzeugen, schaffe es aber nicht, die id zu setzen. Hier ein Beispiel:

    »» function test(uebergebeneID)  {  
    
    > var i = uebergebeneID;  
    > var Element = document.createElement("div");  
      
    Element ist jetzt dein neu erzeugtes Elementobjekt "div"  
      
    
    > var einText = document.createTextNode("Ein Text im div");  
    > Element = Element.appendTextNode(einText);  
      
    Element = Element.appendChild(einText);  
      
    Damit ist Element ein Textnodeobjekt  
      
    
    > // bis hier ist noch alles gut, aber dann sollte das Attribut kommen und das klappt nicht:  
    >   
    > Element.setAttribute("id", i);  
    > }  
    
    

    Ob es so toll ist, einem Textnode eine Id zu geben bzw. ob der überhaupt
    eine will?

    Auf Wiederlesen
    Detlef

    --
    - Wissen ist gut
    - Können ist besser
    - aber das Beste und Interessanteste ist der Weg dahin!
    1. Hallo Detlef,

      Ob es so toll ist, einem Textnode eine Id zu geben bzw. ob der überhaupt
      eine will?

      Wie kommst Du auf sowas????

      Element = Element.appendChild(einText);

      Das macht doch nichts anderes als einen Textknoten in den Div einzuhängen, wieso sollte Element anschließend kein Div mehr sein - nur eben einer mit Text?
      So selbstverständlich wie Du hier glauben machen willst, dass die id in dem Fall im Textknoten gesetzt wird, finde ich ist das nicht!
      Immerhin setzt sie FF (meiner Meinung nach richtiger Weise) auch in den Div.

      Viele Grüße

      Michael

      1. Hallo Michael

        Element = Element.appendChild(einText);

        Das macht doch nichts anderes als einen Textknoten in den Div einzuhängen, wieso sollte Element anschließend kein Div mehr sein - nur eben einer mit Text?

        Weil du Element das Ergebnis von appendChild zuweist, also den Textknoten.

        Immerhin setzt sie FF (meiner Meinung nach richtiger Weise) auch in den Div.

        Aufgrund deiner Beharrlichkeit habe ich es extra nocheinmal getestet, auch
        FF macht es genau, wie ich schreibe.

        "Element.setAttribute is not a function"

        Schreibe ich stattdessen:

        Element.appendChild(einText);

        bekomme ich keine Fehlermeldung und Element bleibt es
        "object HTMLDivElement".

        Auf Wiederlesen
        Detlef

        --
        - Wissen ist gut
        - Können ist besser
        - aber das Beste und Interessanteste ist der Weg dahin!