gpt4 book ai didi

javascript - 如何在 Internet Explorer 中使用 html 子元素获取 contenteditable div 中的插入符位置

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:49:42 25 4
gpt4 key购买 nike

我正在使用一个 contenteditable div,它可以选择具有内联 html 元素,例如标签 "


"在文本流中。

在某些时候我需要获取 contenteditable div 的插入符位置(光标位置),插入符(光标)在 html 子元素之后。

我在 Firefox 的 javascript 中使用以下代码,它可以正确地找到 contenteditable div 的插入符位置(光标位置),但我没有找到任何解决方案让 Internet Explorer 找到插入符位置(光标位置)作为 window.getSelection未定义。

function getCaretPosition() {
if (window.getSelection && window.getSelection().getRangeAt) {
var range = window.getSelection().getRangeAt(0);
var selectedObj = window.getSelection();
var rangeCount = 0;
var childNodes = selectedObj.anchorNode.parentNode.childNodes;
for (var i = 0; i < childNodes.length; i++) {
if (childNodes[i] == selectedObj.anchorNode) {
break;
}
if (childNodes[i].outerHTML)
rangeCount += childNodes[i].outerHTML.length;
else if (childNodes[i].nodeType == 3) {
rangeCount += childNodes[i].textContent.length;
}
}
return range.startOffset + rangeCount;
}
return -1;
}

我发现 document.selection;在 Internet Expolrer 上工作,但我认为它不会为我找到 contenteditable div 的插入符号位置(光标位置)。

谁能帮我解决一下。

在下面的例子中,我的光标位置在

两个

中的't'和'w'之间 <div contenteditable="true"><p>one<br><b>t|wo</b></p></div>我想在上面的例子中需要数字 14,因为我需要在那时执行一些操作我正在使用这个 contenteditable div 作为 RichTextbox 并应用我的自定义样式

最佳答案

您好,我找到了 Internet Explorer 8 或以下版本的答案

       var cursorPosition=0;    
if (document.selection && document.selection.createRange) {
range = document.selection.createRange();
if (range.parentElement() == YourEditableControl) {
var tmpEle = document.createElement("span");
YourEditableControl.insertBefore(tmpEle, YourEditableControl.firstChild);
var tmpRange = range.duplicate();
tmpRange.moveToElementText(tmpEle);
tmpRange.setEndPoint("EndToEnd", range);
cursorPosition= tmpRange.text.length;
}
}

上面的代码解决了我在 IE8 或以下版本中查找当前光标位置的问题因为 window.getSelection() 对于 IE8 或更低版本是未定义的,并且适用于 IE9

因此可以使用 document.selection 一个 selection 对象和 range 对象从 contenteditable< 中获取当前插入符或光标位置 div 或其他控件

希望对你有帮助

关于javascript - 如何在 Internet Explorer 中使用 html 子元素获取 contenteditable div 中的插入符位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10829047/

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