如何从GWT中的RichTextArea获取光标位置或位置?

时间:2012-09-22 09:21:20

标签: java gwt cursor textarea richtextbox

我想从RichTextArea获取光标位置或位置。 我不知道如何获取当前光标位置没有任何鼠标事件。 例如TextArea有方法getCursorPos(),但RichTextArea没有像TextArea这样的方法。 任何人都有任何想法?请帮帮我......

提前致谢...

4 个答案:

答案 0 :(得分:2)

如果要在RichTextArea中的光标位置插入一些内容,可以使用格式化程序执行此操作:

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

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

Get a range's start and end offset's relative to its parent container

答案 1 :(得分:1)

在Vaadin 7.5 @AndreiVolgin的回答似乎无效。但是如果有人只想在光标位置粘贴一些文本,那么 Vaadin 附加组件的CKEditor包装器可能会有所帮助(link)。

以下是后人的一个例子:

CKEditorTextField textArea;
// and for example in some listener function we could call:
textArea.insertHtml("<b>some html</b>");
textArea.insertText("sample text");

答案 2 :(得分:0)

不知道这是否仍然需要,但我今天一直试图做同样的事情并且无法找到明确的答案。我确实找到了这个非GWT解决方案(Get caret (cursor) position in contentEditable area containing HTML content),这需要略微调整everso。希望这有助于某人。

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

答案 3 :(得分:0)

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

    richText=new RichTextArea();
    basicFormatter=richText.getFormatter();
    basicFormatter.insertHTML("dummydata");
    int cursor=richText.getText().indexOf("dummydata");
    basicFormatter.undo();