Pergunta

Eu tenho uma textarea e uma lista. Quando um usuário clica duas vezes em um item de lista, o rótulo do item selecionado deve ser inserido na textarea. Quando um texto é selecionado na textarea, ele deve ser substituído, caso contrário, o texto só precisa ser inserido no texto existente no ponto de alerta.

Consegui obter o texto e tudo mais, eu simplesmente não consigo inseri -lo no ponto de alerta. Alguém sabe como fazer isso?

Foi útil?

Solução

Na verdade, não é JavaScript, mas a Adobe Flex 3. Obrigado pela ajuda, mas me empurrou na direção certa. É assim que é feito no Flex 3:

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

Outras dicas

A resposta aceita funciona muito bem se você não tiver formatação HTML existente. No meu caso, inseri um novo botão no editor que o usuário poderia clicar para colocar em uma palavra -chave. Eu continuei perdendo toda a formatação HTML até cavar na classe real e doi um 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;

        }

O bom sobre essa abordagem é que você também pode aplicar a formatação condicional a esse objeto TexTrange, conforme necessário.

Você pode usar o txtarea.selectionStart e o txtarea.SelectionEnd para obter a posição de texto selecionada.

Depois disso, você exclui o TXT e adiciona um novo texto selecionado.

Eu não sei muito sobre JavaScript, então escrevi para U.

Você pode pesquisar no Google com palavras -chave: "JavaScript Selected Text Textarea" "JavaScript Adicione texto na posição"

Código de exemplo: função insertatcursor (myfield, myvalue) {// ie suporte if (document.selection) {myfield.focus (); SEL = document.Selection.Createrange (); Sel.Text = myValue; } // Mozilla/Netscape Suporte else if (myfield.selectionStart || myfield.selectionStart == '0') {var startpos = myfield.selectionStart; var endpos = myfield.selectionend; myfield.value = myfield.value.substring (0, startpos) + myvalue + myfield.value.substring (endpos, myfield.value.length); } else {myfield.value += myValue; }

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

}

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top