문제

텍스트와 목록이 있습니다. 사용자가 목록 항목을 두 번 클릭하면 선택한 항목의 레이블을 TextArea에 삽입해야합니다. TextRea에서 텍스트를 선택하면 교체해야합니다. 그렇지 않으면 텍스트를 Caret 지점에서 기존 텍스트에 삽입해야합니다.

나는 텍스트와 모든 것을 얻을 수 있었는데, Caret 지점에 삽입 할 수는 없습니다. 누구 든지이 작업을 수행하는 방법을 아는 사람이 있습니까?

도움이 되었습니까?

해결책

실제로 JavaScript는 아니지만 Adobe Flex 3입니다. 도움을 주셔서 감사합니다. 그러나 그것은 올바른 방향으로 나를 밀어 붙였습니다. 이것은 Flex 3에서 수행 된 방식입니다.

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

다른 팁

허용 된 답변은 기존 HTML 형식이없는 경우 훌륭하게 작동합니다. 내 경우에는 편집기에 새 버튼을 삽입하여 사용자가 클릭하여 키워드를 넣을 수 있습니다. 실제 클래스를 파고 TexTrange 객체와 함께 할 때까지 모든 HTML 서식을 계속 잃었습니다.

       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;

        }

이 접근법의 좋은 점은 필요에 따라 조건부 서식을 해당 Textrange 객체에 적용 할 수도 있다는 것입니다.

txtArea.SelectionStart 및 TxtArea.SelectionEnd를 사용하여 선택한 텍스트 위치를 얻을 수 있습니다.

그런 다음 txt를 삭제하고 선택한 새 텍스트를 추가합니다.

나는 JavaScript에 대해 많이 알지 못하므로 U.

키워드로 Google에서 검색 할 수 있습니다.

샘플 코드 : 함수 insertAtCursor (myfield, myValue) {// support if (document.selection) {myfield.focus (); sel = document.selection.createrange (); sel.text = myValue; } // mozilla/netscape support 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);

}

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top