7

我想从 RichTextArea 获取光标位置或位置。我不知道如何在没有任何鼠标事件的情况下获取当前光标位置。

例如TextArea 有getCursorPos() 方法,但RichTextArea 没有TextArea 之类的方法。

有人知道吗?

提前致谢...

4

4 回答 4

2

如果你想在光标位置的 RichTextArea 中插入一些东西,你可以使用格式化程序来完成:

RichTextArea.Formatter formatter = richText.getFormatter();
formatter.insertHTML("My text is inserted at the cursor position");

要使用 JavaScript 查找光标位置,请尝试 Tim Down 提出的解决方案:

获取范围相对于其父容器的开始和结束偏移量

于 2012-09-22T14:27:35.117 回答
1

在 Vaadin 7.5 @AndreiVolgin 答案似乎不起作用。但是如果有人只想在光标位置粘贴一些文本,那么Vaadin插件的CKEditor 包装器可能会有所帮助(链接)。

这是后代的一个例子:

CKEditorTextField textArea;
// and for example in some listener function we could call:
textArea.insertHtml("<b>some html</b>");
textArea.insertText("sample text");
于 2015-10-14T12:55:51.457 回答
0

不知道这是否仍然需要,但我今天一直在尝试做同样的事情,但无法真正找到明确的答案。我确实找到了这个非 GWT 解决方案(Get caret (cursor) position in contentEditable area contains HTML content),需要稍微调整一下。希望这可以帮助某人。

    public static native int getCursor(Element elem) /*-{
    var node = elem.contentWindow.document.body
    var range = elem.contentWindow.getSelection().getRangeAt(0);

    var treeWalker = $doc.createTreeWalker(node, NodeFilter.SHOW_TEXT, function(node) {
        var nodeRange = $doc.createRange();
        nodeRange.selectNodeContents(node);
        return nodeRange.compareBoundaryPoints(Range.END_TO_END, range) < 1 ? NodeFilter.FILTER_ACCEPT
                : NodeFilter.FILTER_REJECT;
    }, false);

    var charCount = 0;
    while (treeWalker.nextNode()) {
        charCount += treeWalker.currentNode.length;
    }

    if (range.startContainer.nodeType == 3) {
        charCount += range.startOffset;
    }

    return charCount;
}-*/;
于 2014-06-11T21:13:23.847 回答
0

试试这个,对我有用。基本上你在富文本区域中插入一个唯一的文本,然后你得到插入文本的索引,然后你删除它。

    richText=new RichTextArea();
    basicFormatter=richText.getFormatter();
    basicFormatter.insertHTML("dummydata");
    int cursor=richText.getText().indexOf("dummydata");
    basicFormatter.undo();
于 2016-10-19T07:16:09.210 回答