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

标签 javascript tinymce position wysiwyg caret

我想知道当假光标在所见即所得编辑器下的某个位置时,我们是否可以得到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/

相关文章:

javascript - 从 TinyMCE 内容动态填充一个 div

JavaScript 返回新行

Javascript math "draw"矩形围绕多个其他矩形实现背景效果

javascript - 在浏览器上保存数据(作为 JS 数组)是一件坏事吗?

javascript - 使用正则表达式将 wiki txt 转换为 Markdown

javascript - 计算tinymce中的字符数

ios - 带有 float 单元格的 UITableView

javascript - 谷歌地图信息框位置

javascript - Bootstrap 下拉菜单按钮未显示在 Leaflet map 中

javascript - 获取变量不会发送到 PHP 脚本