2009-09-10 72 views
2

我有一个textArea和一个列表。当用户双击列表项目时,所选项目的标签应插入到textarea中。在textArea中选择文本时,应该替换它,否则只需将文本插入到插入点的现有文本中。插入文本到flex 3 textarea

我已经设法得到文本和一切,我只是无法设法插入它的插入点。有谁知道如何做到这一点?

回答

2

它实际上不是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); 
+0

有没有想办法做到这一点,而不会丢失现有文本的HTML?我非常肯定,如果有的话,上面的代码片段会剥离现有的HTML。 – 2010-09-23 23:07:09

+0

没关系。我只是想出了一个办法。我会在下面发帖... – 2010-09-23 23:24:29

0

您可以使用txtarea.selectionStart和txtarea.selectionEnd来获取选定的文本位置。

之后,您删除txt并添加新的选定文本。

我不知道太多关于JavaScript的,所以我写了它U.

你可以用关键字在谷歌搜索: “的Javascript所选文本的TextArea” “的Javascript在位置添加文本”

示例代码: function insertAtCursor(myField,myValue){ // IE支持 if(document.selection){0} {0} {0} {0} myField.focus(); sel = document.selection.createRange(); sel.text = myValue; (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); 

}

1

如果您没有现有的HTML格式,接受的答案将很有用。就我而言,我在编辑器中插入了一个新按钮,用户可以点击该按钮放入关键词。我一直在失去所有的HTML格式,直到我在实际的阶级周围挖,用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; 

     } 

对这种做法的好处是,你也可以根据需要应用条件格式到TextRange对象。

+0

谢谢装人!我浪费了两天的时间寻找这个修复! – 2017-05-03 23:24:15