您似乎需要 RichTextArea 中的光标控制来定位光标、选择范围和删除文本。
此功能在 gwt RichTextArea 中不存在,但有一个问题已进行了长时间的讨论,一些补丁和一个库(gwt-selection)实现了它。该问题最近已关闭,因为 gwt 维护人员正在摆脱所有最近没有活动的问题,但也许您可以重新打开它或 ping 所有者来执行此操作。使用此库,您可以获得文档的一部分并将其删除,而无需删除格式标签。
无论如何,如果您需要删除完整的文本并为所有内容设置一些默认 css,您可以做的是为 RichTextArea iframe 的主体设置样式。
使用gwtquery获取内容主体的样式很容易:
import static com.google.gwt.query.client.GQuery.*;
[...]
// First attach the widget to the DOM
RootPanel.get().add(richTextArea);
// We only can manipulate the body, once the iframe document has been created,
// and this happens after it has been attached.
// Because richtTextArea uses a timeout to initialize we need a delay.
$(richTextArea)
.delay(1,
lazy()
.contents().find("body")
.css("font-name", "verdana")
.css("font-size", "x-small")
.css("color", "gray")
.done());
如果你想在不导入 gwtquery 的情况下做同样的事情,你需要一些 jsni 来在 RichTextArea 附加并初始化之后获取 body 元素:
// First attach the widget to the DOM
RootPanel.get().add(richTextArea);
// We only can manipulate the body, once the iframe document has been created,
// and this happens after it has been attached.
// Using a timer because richtTextArea uses a timeout to initialize
new Timer() {
// There is no method to get the body, so we use JSNI
private native Element getBodyElement(Element iframe) /*-{
return iframe.contentWindow.document.body;
}-*/;
public void run() {
Element e = getBodyElement(richTextArea.getElement());
e.getStyle().setProperty("fontName", "Verdana");
e.getStyle().setProperty("fontSize", "x-small");
e.getStyle().setProperty("color", "gray");
}
}.schedule(1);