gpt4 book ai didi

javascript - designMode iFrame 获取光标位置

转载 作者:行者123 更新时间:2023-11-29 17:26:07 25 4
gpt4 key购买 nike

我想获取可编辑 iFrame 的光标位置(使用 designMode)。这是我到目前为止的代码:

document.getElementById('iframe_id').contentWindow.document.getSelection().getRangeAt(0)

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

请注意:我设置光标位置感兴趣;我只是想得到它。

我希望修复程序与 Chrome/Safari/Firefox 兼容;无需与 IE 兼容。

如有任何帮助,我们将不胜感激。

最佳答案

以下根据this answer但被修改为适用于任何文档中的选择(例如 iframe 中的选择)。该答案中关于这种方法的幼稚的警告仍然适用。

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

示例用法:

var iframe = document.getElementById("foo");
var iframeBody = (iframe.contentDocument || iframe.contentWindow.document).body;
alert( getCaretCharacterOffsetWithin(iframeBody) );

关于javascript - designMode iFrame 获取光标位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8664504/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com