如何在光标所在位置插入一些文本?

发布于 2024-12-04 06:29:03 字数 1303 浏览 0 评论 0原文

我正在升级一些可以在 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');
}

I'm upgrading some Javascript which works on IE. However, I'm having some problems.

Heres the IE code:

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;
}

I've tried replacing CreateTextRange with CreateRange for non-IE browsers, but this doesn't help. With code like this:

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');
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

你与清晨阳光 2024-12-11 06:29:03

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

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");

Here's a function to insert text at the cursor in a textarea or text input, which is what it seems you have. It works in all major browsers:

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();
    }
}

You can use it as follows:

var iframeWin = document.getElementById('text').contentWindow;
var textObj = iframeWin.document.getElementById('Content');

insertTextAtCursor(textObj, "foo");
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文