首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >designMode iFrame获取光标位置

designMode iFrame获取光标位置
EN

Stack Overflow用户
提问于 2011-12-29 05:58:11
回答 2查看 6.6K关注 0票数 4

我想获得可编辑iFrame的光标位置(使用designMode)。下面是我到目前为止掌握的代码:

代码语言:javascript
复制
document.getElementById('iframe_id').contentWindow.document.getSelection().getRangeAt(0)

从这里,获取属性startOffset从该行的开头获取字符数,而不是从iFrame文档的开头获取字符数。我想得到光标相对于文档开头的位置。

请注意:我对设置光标位置不感兴趣,我只想得到它。

最好是,我希望这个补丁与Chrome/Safari/Firefox兼容,不需要与IE兼容。

任何帮助都将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-01-06 12:02:30

下面的内容基于this answer,但经过修改以处理任何文档中的选择(如iframe中的选择)。这一答复中提出的关于这一办法的天真性的同样的警告仍然适用。

代码语言:javascript
复制
function getCaretCharacterOffsetWithin(element) {
    var doc = element.ownerDocument || element.document;
    var win = doc.defaultView || doc.parentWindow;
    var sel, range, preCaretRange, caretOffset = 0;
    if (typeof win.getSelection != "undefined") {
        sel = win.getSelection();
        if (sel.rangeCount) {
            range = sel.getRangeAt(0);
            preCaretRange = range.cloneRange();
            preCaretRange.selectNodeContents(element);
            preCaretRange.setEnd(range.endContainer, range.endOffset);
            caretOffset = preCaretRange.toString().length;
        }
    } else if ( (sel = doc.selection) && sel.type != "Control") {
        range = doc.selection.createRange();
        preCaretRange = doc.body.createTextRange();
        preCaretRange.moveToElementText(element);
        preCaretRange.setEndPoint("EndToEnd", textRange);
        caretOffset = preCaretTextRange.text.length;
    }
    return caretOffset;
}

示例用法:

代码语言:javascript
复制
var iframe = document.getElementById("foo");
var iframeBody = (iframe.contentDocument || iframe.contentWindow.document).body;
alert( getCaretCharacterOffsetWithin(iframeBody) );
票数 8
EN

Stack Overflow用户

发布于 2014-02-02 19:10:25

这对我来说很管用

代码语言:javascript
复制
function getCaretPosition() {
var element = document.idEditbox.document.body; // just my content IFRAME
var doc = element.ownerDocument || element.document;
var win = doc.defaultView || doc.parentWindow;
var sel, range, preCaretRange, caretOffset = 0;
if (typeof win.getSelection != "undefined") {
    sel = win.getSelection();
    if (sel.rangeCount) {
        range = sel.getRangeAt(0);
        preCaretRange = range.cloneRange();
        preCaretRange.selectNodeContents(element);
        preCaretRange.setEnd(range.endContainer, range.endOffset);
        caretOffset = preCaretRange.toString().length;
    }
} else if ( (sel = doc.selection) && sel.type != "Control") {
    range = doc.selection.createRange();
var tempRange = range.duplicate();
    preCaretRange = doc.body.createTextRange();
    preCaretRange.moveToElementText(element);
    preCaretRange.setEndPoint("EndToEnd", tempRange);
    caretOffset = preCaretRange.text.length;
}
return caretOffset;

}

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8664504

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档