Tom: Zugriff auf selektierten Text in Textarea-Feld ?

Guten Tag

Ich suche eine Art Selection-Eigenschaft des element-Objektes vom Typ Textarea.

Ausgangslage:
In einem Formular existiert ein mehrzeiliges Textfeld, in dem der Benutzer beliebig Text bearbeiten kann. Nun soll dem Benutzer einige Eingaben über vorbelegte Buttons erleichtert werden. Unter anderem soll er einen Teil des Textes mit der Maus markieren (selektieren) können und durch den Klick auf den Button soll vor und nach der Markierung weiterer Text eingefügt werden.

Fragestellung:
Gibt es in Javascript ein Selection-Objekt, bzw. eine Selecetion-Start- und Selection-End-Eigenschaft für den ausgewählten Text in einem Textfeld ?

So etwa in dieser Art:
   var fieldText = document.forms[FormName].elements[ElementName].value;
   var selctionObject = document.forms[FormName].elements[ElementName].selection;
  
   selectedText = fieldText.substring(selctionObject.start,selctionObject.end);
   alert(selectedText);

Ich habe bisher leider nichts in den Dokus gefunden.

Gibt es vielleicht einen solchen Zugriff nur im MSIE über das document.all-Objekt ?

Da die Anwendung nur für einen kleinen Benutzerkreis zu Verwaltung von dynamischen Inhalten verwendet wird, ist eine Beschränkung nur auf MSIE 4.x oder 5.x durchaus möglich?

Besten Dank für die kommenden Antworten.

Grüsse
Tom

  1. Ich suche eine Art Selection-Eigenschaft des element-Objektes vom Typ Textarea.

    Hallo Tom!

    Wenn ich dich recht verstanden habe, soll der Besucher erst eine Textauswahl treffen, danach soll die Textauswahl mit einem Klick ins Textfeld an die jeweilige Klickposition eingefügt werden.
    Mit der "select"-Methode kriegst Du das nicht hin. Da musst Du schon Tricksen. Nachstehendes Script zeigt, wie Du prinzipiell programmieren müsstest. Kopier es Dir auf den Rechner und probiere es aus.

    Folgende Erweiterungen müsstest Du noch einbauen:

    1. Das Script erstmal läuft nur auf IE. Um es auf NN laufen zu lassen, müsstest Du die "offset"-Eigenschaften in "page"-Eigenschaften ändern.

    2. Das Script berücksichtigt keine Leerzeichen, Tabs, usw. Mit dem "RegExp"-Object müsstest Du deren jeweilige Position im Text abfragen und den Wert der Variablen "Buchstabe" entsprechend kürzen. Ist also machbar.

    <!doctype html public "-//W3C//DTD HTML 4.0 //EN">
    <html>
    <head>
    <script language="JavaScript">
    <!--
    var WelcherName = '';
    function Coords(){
             var Buchstabe;
             var Zeile = Math.round(window.event.offsetY);
             var ZeilenIndex;
             var z1 = 17;
             var z2 = 0;
             var Zeichen = 0;
             for (i=1; i<10; i++) {
                       if (Zeile<z1 && Zeile>z2) {
                                    ZeilenIndex=i;
                       }
                       z1+=16;
                       z2+=16;
             }
             for (i=1; i<10; i++) {
                       if (ZeilenIndex==i) {
                       Buchstabe = Math.round(window.event.offsetX / 8 + Zeichen);
                       }
                       Zeichen+=60;
             }
             var Text = document.forms[0].elements[0].value;
             var ersterText = Text.substr(0,Buchstabe);
             var letzterText = Text.substr(Buchstabe+1,Text.length);
             var NeuerText = ersterText + WelcherName + letzterText;
             document.forms[0].elements[0].value = NeuerText;
    }
    function Reset() {
             document.forms[0].elements[0].value = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa';
    }
    function Annette() {
             WelcherName = 'ANNETTE';
    }
    function Brigitte() {
             WelcherName = 'BRIGITTE';
    }
    //-->
    </script>
    </head>
    <body text="#000000" bgcolor="#FFFFFF" link="#FF0000" alink="#FF0000" vlink="#FF0000">
    <div style="position:absolute; left:200; top:200;">
    <form>
      <textarea rows=10 cols=60 onClick="Coords()">aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa</textarea>
    </form>
    </div>
    <br><br>
    Name <a href="javascript:Annette()">"Annette"</a> einfügen - zuerst hier klicken, dann Cursor ins Textfeld<br>
    Name <a href="javascript:Brigitte()">"Brigitte"</a> einfügen - zuerst hier klicken, dann Cursor ins Textfeld<br><br><br>
    Textfeld <a href="javascript:Reset()">resetten</a>
    </body>
    </html>
    </script>
    </head>
    </body>

    Viele Grüsse
    Hartmut

    1. Hallo Hartmut

      Mit der "select"-Methode kriegst Du das nicht hin. Da musst Du schon Tricksen. Nachstehendes Script zeigt, wie Du prinzipiell programmieren müsstest. Kopier es Dir auf den Rechner und probiere es aus.

      Habe ich gleich getan und es funktioniert :-)))

      Danke vielmals für den neuen Lösungsansatz, ich werde ihn in den nächsten Tagen (im neuen Jahr) noch verfeinern.

      Schade nur, dass die (Entwickler bei Netscape) vergessen haben, einen direkten Zugriff auf den selektierten Text in Textfeldern zu erlauben.
      Dann wäre das Leben doch noch etwas einfacher geblieben ;-)

      Viele Grüsse und einen guten Rutsch ins Jahr 2000.
      Tom