Pregunta

Tengo un área de texto y una lista. Cuando un usuario hace doble clic en un elemento de la lista, la etiqueta del elemento seleccionado debe insertarse en el área de texto. Cuando se selecciona un texto en el área de texto, debe reemplazarse, de lo contrario, el texto solo debe insertarse en el texto existente en el punto de intercalación.

Logré obtener el texto y todo, simplemente no puedo insertarlo en el punto de intercalación. ¿Alguien sabe cómo hacer esto?

¿Fue útil?

Solución

En realidad no es JavaScript sino Adobe Flex 3. Sin embargo, gracias por la ayuda, me empujó en la dirección correcta. Así es como se hace en Flex 3:

var caretStart:int = textArea.selectionBeginIndex;
var caretEnd:int = textArea.selectionEndIndex;
textArea.text = textArea.text.substring(0,caretStart)
              + newText
              + textArea.text.substr(caretEnd);

Otros consejos

La respuesta aceptada funciona muy bien si no tiene un formato HTML existente. En mi caso, inserté un nuevo botón en el editor en el que el usuario podía hacer clic para ingresar una palabra clave. Seguí perdiendo todo el formato HTML hasta que busqué en la clase real y me alineé con un objeto TextRange:

       public function keyWord_Click(event:Event) : void 
        {

            var caretStart:int = txtEditor.textArea.selectionBeginIndex;
            var caretEnd:int = txtEditor.textArea.selectionEndIndex;
            var newText : String = "[[[KEYWORD]]]";

            var tf:TextRange = new TextRange(txtEditor,true,caretStart,caretEnd);
            tf.text = newText;

        }

Lo bueno de este enfoque es que también puede aplicar formato condicional a ese objeto TextRange según sea necesario.

Puedes usar txtarea.selectionStart y txtarea.selectionEnd para obtener la posición del texto seleccionado.

Después de eso, eliminas txt y agregas el nuevo texto seleccionado.

No sé mucho sobre Javascript, así que lo escribí para U.

Puedes buscar en google con palabras clave: " Texto seleccionado de Javascript TextArea " " Javascript agrega texto en la posición "

Código de muestra: función insertAtCursor (myField, myValue) {     // soporte de IE     if (document.selection) {     myField.focus ();     sel = document.selection.createRange ();     sel.text = myValue;     }     // Soporte de MOZILLA / NETSCAPE     si no (myField.selectionStart || myField.selectionStart == '0') {         var startPos = myField.selectionStart;         var endPos = myField.selectionEnd;         myField.value = myField.value.substring (0, startPos)         + miValor         + myField.value.substring (endPos, myField.value.length);     } else {         myField.value + = myValue;     }

caretPos = doGetCaretPosition(myField);
alert(caretPos);
setCaretPosition(myField,caretPos-3);

}

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top