在文本插入文本区域后放置光标

时间:2010-12-18 19:47:03

标签: javascript html

我知道有类似的问题,但我没有得到答案。

function setTextareaSelection(newText) {
    var selText;
    newText = "This is a text \n to insert";
    var textarea = document.getElementById('textarea');
    if (window.getSelection) {
        var selText = "";
        selText = textarea.value.slice(textarea.selectionStart, textarea.selectionEnd);
        var selEnd = textarea.selectionEnd;

        var selTextBefore = textarea.value.substring(0, textarea.selectionStart);
        var selTextAfter = textarea.value.substring(textarea.selectionEnd, textarea.value.length);

        if (selText != "") {
            textarea.value = selTextBefore + newText + selTextAfter;
            textarea.setSelectionRange(selEnd, selEnd);
        }
    }
}

我想在插入的文字后放置鼠标光标 仅限Firefox

在线示例: link text

3 个答案:

答案 0 :(得分:1)

textarea.setSelectionRange(selTextBefore+newText.length, selTextBefore+newText.length);

答案 1 :(得分:1)

该代码存在问题:为什么在您实际使用它时测试window.getSelection?这是您需要担心的textarea的selectionStartselectionEnd属性。您应该根据您对几个浏览器的了解来测试您即将使用的功能,而不是完全不相关的功能。

这是一个将在所有主流浏览器中执行此操作的功能,包括IE(至少返回版本5,可能是4)。它也比你现在的要短。我知道你提到你只需要它在Firefox中工作,但其他人可能会发现IE支持很有用。

function pasteIntoInput(el, text) {
    el.focus();
    if (typeof el.selectionStart == "number"
            && typeof el.selectionEnd == "number") {
        var val = el.value;
        var selStart = el.selectionStart;
        el.value = val.slice(0, selStart) + text + val.slice(el.selectionEnd);
        el.selectionEnd = el.selectionStart = selStart + text.length;
    } else if (typeof document.selection != "undefined") {
        var textRange = document.selection.createRange();
        textRange.text = text;
        textRange.collapse(false);
        textRange.select();
    }
}

pasteIntoInput(document.getElementById("yourTextareaId"), "NEW TEXT");

答案 2 :(得分:0)

http://jsfiddle.net/A8tNb/5/

  • 找到替换前后字符串末尾的距离,并将其用于新选择。
  • 专注领域

实际代码

 function  setTextareaSelection(newText) {
     var selText;
     newText="This is a text \n to insert" ;
     var textarea=document.getElementById('textarea');
     if (window.getSelection) {
         var selText = "";
         selText = textarea.value.slice(textarea.selectionStart,   textarea.selectionEnd);
         var selEnd = textarea.selectionEnd;
         var fromEnd = textarea.value.length - selEnd ;
         var selTextBefore = textarea.value.substring(0, textarea.selectionStart);
         var selTextAfter = textarea.value.substring(textarea.selectionEnd, textarea.value.length);
         if (selText != "") {
             textarea.value = selTextBefore + newText + selTextAfter;
             var curs = textarea.value.length - fromEnd
             textarea.setSelectionRange(curs ,curs );
         }
         textarea.focus();
     }
 }