gpt4 book ai didi

javascript - Tinymce - 是否有可能获得与所见即所得编辑器相对应的文本区域的插入符号位置?

转载 作者:搜寻专家 更新时间:2023-11-01 04:32:46 24 4
gpt4 key购买 nike

我想知道当假光标在所见即所得编辑器下的某个位置时,我们是否可以得到textarea的真实插入位置?

为了更好地理解问题,请看下图

enter image description here在所见即所得模式下,当光标在s之后,我们得到位置53。当光标在 t 之后时,我们得到位置 79

代码会是这样的……

function getRealCaretPosition() {
// all the dirty work goes here
}

// Ctrl + Q
if(e.ctrlKey && e.which == 81) {
var pos = getRealCaretPosition();
alert(pos);
}

这在理论上有可能实现吗?

最佳答案

window.getSelection() 将为您提供当前选择点,然后从这里向后树状行走直到您的节点开始,添加遇到的所有文本节点的长度。

function walkback(node, stopAt) {
if (node.childNodes && node.childNodes.length) { // go to last child
while (node && node.childNodes.length > 0) {
node = node.childNodes[node.childNodes.length - 1];
}
} else if (node.previousSibling) { // else go to previous node
node = node.previousSibling;
} else if (node.parentNode) { // else go to previous branch
while (node && !node.previousSibling && node.parentNode) {
node = node.parentNode;
}
if (node === stopAt) return;
node = node.previousSibling;
} else { // nowhere to go
return;
}
if (node) {
if (node.nodeType === 3) return node;
if (node === stopAt) return;
return walkback(node, stopAt);
}
return;
}

function getRealCaretPosition() {
var sel = window.getSelection(), // current selection
pos = sel.anchorOffset, // get caret start position
node = sel.anchorNode; // get the current #text node
while (node = walkback(node, myContentEditableElement)) {
pos = pos + node.data.length; // add the lengths of the previous text nodes
}
return pos;
}

当然,您还需要检查当前选择是否确实在您感兴趣的 HTMLElement 内。

关于javascript - Tinymce - 是否有可能获得与所见即所得编辑器相对应的文本区域的插入符号位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15053219/

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