【问题标题】:How do I insert some text where the cursor is? [duplicate]如何在光标所在的位置插入一些文本? [复制]
【发布时间】:2011-11-16 06:57:54
【问题描述】:

我正在升级一些适用于 IE 的 Javascript。但是,我遇到了一些问题。

IE 代码如下:

var range = document.getElementById('text').contentWindow.window
                 .document.getElementById('Content').createTextRange();
var textObj = document.getElementById('text').contentWindow.window
                 .document.getElementById('Content');

var textFieldValue = theSmile;
if (range && textObj.CursorPos) {
    var CursorPos = textObj.CursorPos;
    CursorPos.text = CursorPos.text.charAt(CursorPos.text.length - 1) 
                              == ' ' ?' ' + textFieldValue : textFieldValue;
} else {
  textObj.value  = textFieldValue;
}

对于非 IE 浏览器,我尝试将 CreateTextRange 替换为 CreateRange,但这无济于事。使用这样的代码:

var range;
var textObj;
var iframeEl = document.getElementById('text');
if (iframeEl.contentDocument) { // DOM
    range = iframeEl.contentDocument.getElementById('Content').createRange;
    textObj= iframeEl.contentDocument.getElementById('Content');
} else if (iframeEl.contentWindow) { // IE win
    range = iframeEl.contentWindow.document.getElementById('Content')
                                                            .createTextRange;
    textObj= iframeEl.contentWindow.document.getElementById('Content');
}

【问题讨论】:

    标签: javascript internet-explorer firefox cross-browser


    【解决方案1】:

    这是一个在文本区域或文本输入中的光标处插入文本的功能,这就是您所拥有的。它适用于所有主流浏览器:

    function insertTextAtCursor(el, text) {
        var val = el.value, endIndex, range, doc = el.ownerDocument;
        if (typeof el.selectionStart == "number"
                && typeof el.selectionEnd == "number") {
            endIndex = el.selectionEnd;
            el.value = val.slice(0, endIndex) + text + val.slice(endIndex);
            el.selectionStart = el.selectionEnd = endIndex + text.length;
        } else if (doc.selection != "undefined" && doc.selection.createRange) {
            el.focus();
            range = doc.selection.createRange();
            range.collapse(false);
            range.text = text;
            range.select();
        }
    }
    

    你可以按如下方式使用它:

    var iframeWin = document.getElementById('text').contentWindow;
    var textObj = iframeWin.document.getElementById('Content');
    
    insertTextAtCursor(textObj, "foo");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多