Christian S.: Text eines <option> per JavaScript setzen (Leerzeichen)

Hi

ich möchte den Text eines <option> Elements per JavaScript setzen.

An sich klappt auch:

drop.options[0].text = "Hallo Welt";

mache ich das ganze aber über:

drop.options[0].text = "Hallo";
drop.options[0].text += " ";
drop.options[0].text += "Welt";

dann verschluckt er das Leerzeichen...

Das Problem tritt nur im Firefox auf.

Möchte eine editierbare Dropdownliste basteln und addiere beim onkeypress immer das jeweilige Zeichen auf den Text.

Hat jemand eine Lösung?

Gruß
Christian.

  1. Hallo,

    unabhängig vom o.g. Fehler:

    drop.options[0].text = "Hallo";
    drop.options[0].text += " ";
    drop.options[0].text += "Welt";

    bedeutet, dass 3x die Referenz auf .text ermittelt wird, also unnötig. Daher den String als Variable zusammen bauen und dann .text
    1x zuweisen. Der Parser freut sich.

    Gruss Tom.

    1. Hallo,

      unabhängig vom o.g. Fehler:

      drop.options[0].text = "Hallo";
      drop.options[0].text += " ";
      drop.options[0].text += "Welt";

      bedeutet, dass 3x die Referenz auf .text ermittelt wird

      Gilt das etwa auch für Eigenschaften? Bei Methoden kann ich's ja verstehen, aber Eigenschaften sind doch fest zugewiesene Werte/Referenzen (abgesehen von getter-Methoden wie textContent oder innerHTML).

      Eine Verlangsamung könnte sich höchstens durch die Aktualisierung der Darstellung ergeben, aber das macht der Browser ja auch beim Scrollen und Skalieren.

      mfg. Daniel

    2. bedeutet, dass 3x die Referenz auf .text ermittelt wird, also unnötig. Daher den String als Variable zusammen bauen und dann .text

      Du erzählst viel Unfug. Die Referenz auf text wird hier nicht ermittelt, der Tipp mit dem zusammenbauen stimmt allerdings, wobei das in diesem Fall nur ein Beispeil ist um das Phänomen zu zeigen, also ist auch der Tipp erstmal Unfug.

      1x zuweisen. Der Parser freut sich.

      Dem Parser ist das recht egal

      Struppi.

      --
      Javascript ist toll (Perl auch!)
      1. Hallo,

        die eigenschaft .teext wird mit Wert belegt, also muss ein Zeiger ermittelt werden, der auf einen Speicherbereich zeigt, der den Wert aufnimmt, wobei der Datentyp den Brwoser bzw. die Scriptmaschine anweist, wie die Daten zu hinterlegen sind.

        drop.options[0].text = "Hallo";

        bedeutet also, dass die Collection (Zeigerfeld) .options am Index - hier 0 ausgelesen wird, der ermittelte Zeiger zum Adressbereich
        der Eigenschaft .text führen muss.

        Drop selbst ist ebenfalls ein Zeiger auf ein Objekt.

        Es findet also ein Zeigerdurchhangeln statt und das 3x, nur um letztendlich einen Wert zu füllen.

        Das Zeigerhangeln entfällt etwas, wenn man z.B.
         var Zeiger=drop.options[0]; nimmt, also den Parser genau 1x
         den Zeiger ermitteln lässt.

        Das Zeigerhangeln entfällt vorallem bei einer globalen Variable, deren Referenz schon ermittelt ist.

        Ergo:

        var Kette='text1';
        Kette+=' ...';
        .....

        drop.options[0].text=Kette;

        Soweit zu Deiner Unfugbehauptung: Das waren Programmierungsgrundlagen bei Interpreterverwendung per Script.

        Wer übrigens nicht parserfreundlich programmiert, muss sich nicht wundern, wenn Script Laufzeit benötigt. Und Scriptoptimierung ist
        der I-Punkt in Intelligenter Programmierung, gell :-)

        Tom.

        1. Wer übrigens nicht parserfreundlich programmiert, muss sich nicht wundern, wenn Script Laufzeit benötigt. Und Scriptoptimierung ist
          der I-Punkt in Intelligenter Programmierung, gell :-)

          Mal abgesehen von den unsauberkeinten in deiner Erläuterung, du hast das gelesen was ich geschrieben habe?
          Es ging darum einen Effekt zu zeigen, nicht darum irgendetwas zu optimieren, im gegenteil durch die Optiemierung kann man den Effekt nicht mehr sehen. Und wenn du dir Beschreibung der frage durchliest wird dir vielleicht aufgehen, dass es um genau diesen Effekt ging.

          Struppi.

          --
          Javascript ist toll (Perl auch!)
  2. Moin

    kann es sein dass FF Leerzeichen am Ende von options-Texten unterdrückt?

    Falls ja (müsstest du wohl mal selbst testen) könntest du einfach ein geschütztes Leerzeichen ( String.fromCharCode(160) ) einfügen

    Gruß
    rfb

    --
    Man kann einen Menschen nichts lehren, man kann ihm nur helfen, es selbst zu entdecken.
    (Galileo Galilei)
  3. hi,

    drop.options[0].text = "Hallo";
    drop.options[0].text += " ";
    drop.options[0].text += "Welt";

    dann verschluckt er das Leerzeichen...

    .text repräsentiert einen Textknoten.
    Whitespace am Anfang und Ende von Textknoten ist per Definition zu eliminieren.

    Das Problem tritt nur im Firefox auf.

    Dann rufen deine anderen Testbrowser wohl nicht die normalize-Methode des parentNodes auf, obwohl sie es eigentlich tun sollten.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. Hallo,

      .text repräsentiert einen Textknoten.

      Nein, er repräsentiert den Textknoten ohne Leerzeichen am Anfang und Ende.

      Whitespace am Anfang und Ende von Textknoten ist per Definition zu eliminieren.

      Nein. Der Textknoten bleibt so, wie er ist. Nur die text-Eigenschaft wird bearbeitet.

      Beispiel:

      <select>  
      <option>  
      Text  
      </option>  
      </select>  
      <script type="text/javascript">  
      window.onload = function(){  
       var option = document.getElementsByTagName("option")[0];  
       alert("Text: „"+option.text + "“");  
       alert("firstChild.nodeValue: „" + option.firstChild.nodeValue + "“");  
      }  
      </script>
      

      mfg. Daniel