ernst Groß: getElementByID wird nach geändertem DOM nicht gefunden

Hi,

in einem Script habe ich via innerHTML dem DOM neue Knoten hinzugefügt. Anschließend möchte ich auf einen der neuen Knoten zugreifen mit document.getElementByID.
Beim FireFox geht das auch wunderbar nur der IE findet die neuen Knoten nicht:
CODE:
 newHTML = '<input type="text" id="'+newid+'" name="'+id+'" value="">';
 document.getElementById(id).innerHTML= newHTML;

document.getElementById(newid).value = newValue;

was muß man im IE machen?

Vielen Dank für Eure Hilfe
 Ernst Groß
 egross()gmx.net

  1. Hello out there!

    Beim FireFox geht das auch wunderbar nur der IE findet die neuen Knoten nicht:

    Kann dein Problem nicht nachvollziehen. (IE 6)

    See ya up the road,
    Gunnar

    --
    „Wer Gründe anhört, kommt in Gefahr nachzugeben.“ (Goethe)
    1. Hello out there!

      Beim FireFox geht das auch wunderbar nur der IE findet die neuen Knoten nicht:

      Kann dein Problem nicht nachvollziehen. (IE 6)

      See ya up the road,
      Gunnar

      im html steht irgendwo eine Tabelle mit:
      <td ondblclick="tableToInput('o_z3s2')"> blblabla</td>

      javascript:
      function tableToInput(id) {

      oldID = 'o_'+id.substr(2);  // ab dem zweiten Zeichen
       oldValue = document.getElementById(oldID).value;

      newHTML = '<input type="text" id="'+id+'" name="'+id+'" value=""><input type="submit" name="senden" value="senden">';

      document.getElementById(id).innerHTML= newHTML;
       document.getElementById(id).value = oldValue;
      }

      Alternativ könnte man ja oldValue in das value-Attribut schreiben, allerdings klappt das nicht sobald Anführungszeichen in der Tablle auftauchen. Anführungszeichen zerkloppen den ganzen html-Code dann!

      Also dachte ich mir, ich springe wieder in den Knoten und schreibe mein value anschließend rein. Wie gesagt, im FF geht das ohne Probleme im IE 7 nicht.

      Vielen Dank für Deine Hilfe
      Ernst

      1. Hi,

        javascript:
        function tableToInput(id) {

        oldID = 'o_'+id.substr(2);  // ab dem zweiten Zeichen

        was machst du mit oldID?

        oldValue = document.getElementById(oldID).value;

        newHTML = '<input type="text" id="'+id+'" name="'+id+'" value=""><input type="submit" name="senden" value="senden">';

        In deinem Ausgangsposting hattest du hier id="'+newId' stehen. Ist das jetzt ein Tippfehler?

        document.getElementById(id).innerHTML= newHTML;

        So schreibst du jetzt in das Element mit der ID id nochmal ein Element mit der ID id. Das darf so nicht sein, da die ID immer eindeutig sein muss.

        document.getElementById(id).value = oldValue;
        }

        Alternativ könnte man ja oldValue in das value-Attribut schreiben, allerdings klappt das nicht sobald Anführungszeichen in der Tablle auftauchen. Anführungszeichen zerkloppen den ganzen html-Code dann!

        Anfuehrungszeichen koenntest du doch auch maskieren/codieren.

        mfG,
        steckl

        1. Hi,

          Hi,

          document.getElementById(id).innerHTML= newHTML;
          So schreibst du jetzt in das Element mit der ID id nochmal ein Element mit der ID id. Das darf so nicht sein, da die ID immer eindeutig sein muss.

          ja die Function hat sich inzwischen dreimal wieder geändert!

          Das ID's eindeutig sind ist mir klar.
          Frage: wenn ich mit der Methode innerHTML einen Knoten überschreibe, der eine ID hatte, kann ich diese ID doch wiederverwenden an anderer Stelle? Es bleibt ja eindeutig?
          Oder ist das genau das Problem?

          Danke für Deine Hilfe,
          Ernst

          1. Hi,

            Frage: wenn ich mit der Methode innerHTML einen Knoten überschreibe, der eine ID hatte, kann ich diese ID doch wiederverwenden an anderer Stelle? Es bleibt ja eindeutig?

            Weiss ich nicht, sollte aber eigentlich gehen. Aber das machst du ja nicht.

            Oder ist das genau das Problem?

            Das Problem ist, dass du mit innerHTML nicht den Knoten ueberschreibst, sondern nur dessen Inhalt.

            mfG,
            steckl

  2. Hi,

    newHTML = '<input type="text" id="'+newid+'" name="'+id+'" value="">';
    document.getElementById(id).innerHTML= newHTML;

    document.getElementById(newid).value = newValue;

    Was steht denn in den Variablen id und newid?
    Wenn mich nicht alles taescht muss die id mit einem Buchstaben beginnen.

    mfG,
    steckl

  3. in einem Script habe ich via innerHTML dem DOM neue Knoten hinzugefügt. Anschließend möchte ich auf einen der neuen Knoten zugreifen mit document.getElementByID.

    Du fügst keinen neuen Knoten zu, sondern du überschreibst den HTML Code innerhalb eines Knotens.

    Beim FireFox geht das auch wunderbar nur der IE findet die neuen Knoten nicht:
    CODE:
    newHTML = '<input type="text" id="'+newid+'" name="'+id+'" value="">';
    document.getElementById(id).innerHTML= newHTML;

    document.getElementById(newid).value = newValue;

    Irgendwie ist das unlogisch du hast einen Knoten mit einer ID füllst darin ein Element mit der gleichen ID und willst dann dieses Element rausfischen. Was ist das denn für ein Objekt was du da neu beschreibst? wenn es ein input Element ist, dann ist das was du machst überflüssig und falsch, da ein input Element kein innerHTML hat. Ist es ein anderes solltest du mit createElement und appendChild arbeiten.

    Struppi.