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

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

提前致谢…

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

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

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

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

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

以下是后人的一个例子:

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

不知道这是否仍然需要,但我今天一直试图做同样的事情,并没有真正找到明确的答案。 我确实找到了这个非GWT解决方案( 在包含HTML内容的contentEditable区域中获取插入符号(光标)位置 ),这需要略微调整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; }-*/; 

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

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