我有一个textArea和一个列表。当用户双击列表项时,应将所选项的标签插入到textarea中。当在textArea中选择文本时,应该替换它,否则只需要将文本插入到插入点的现有文本中。
我已经设法获取文本和所有内容,我无法将其插入到插入点。有谁知道怎么做?
答案 0 :(得分: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);
答案 1 :(得分: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对象。
答案 2 :(得分:0)
您可以使用txtarea.selectionStart和txtarea.selectionEnd来获取所选文本位置。
之后,删除txt并添加新的选定文本。
我对Javascript知之甚少,所以我为U写了它。
您可以使用关键字在Google上进行搜索: “Javascript Selected Text TextArea” “Javascript在位置添加文字”
示例代码: function insertAtCursor(myField,myValue){ // IE支持 if(document.selection){ myField.focus(); sel = document.selection.createRange(); sel.text = myValue; } // MOZILLA / NETSCAPE支持 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);
}