GWT:如何从当前光标位置或所选文本中获取css样式的属性
GWT: How to get css style attributes from current cursor positon or selected text?
我使用过https://code.google.com/p/google-web-toolkit/source/browse/tags/2.5.0/samples/showcase/src/com/google/gwt/sample/showcase/client/content/text/RichTextToolbar.java
我想显示文本的字体系列、字体大小、颜色和BG颜色,我正在通过(GWT)Formatter.getForeColor()获取文本颜色,但仍然不知道如何获取。
示例:<font face="Arial">Apple </font><span style="background-color: rgb(255, 0, 0);"><font face="Courier" size="5">banana</font></span><br>
如果光标在"Apple"中,则应返回字体系列为Arial,如果光标位于"Banana"中,应返回字体家族:Courier和size:3,BG颜色:Red
对我来说,如果解决方案是JavaScript、JQuery或GWT,那没问题。
我想做工具栏像谷歌文档。
如果有人有主意,请帮我怎么得到?
我看到了两个选项。要么使用GWT组件构建UI,以便在代码中添加和读取样式信息,要么尝试使用JSNI获取鼠标指针下方的元素,然后尝试分析该元素。
第一个可能更容易的解决方案如下:
public class FontTest implements EntryPoint {
public void onModuleLoad() {
FlowPanel panel = new FlowPanel();
Label labelA = new Label("Apple");
labelA.getElement().getStyle().setProperty("fontFamily", "Arial");
Label labelB = new Label("Banana");
labelB.getElement().getStyle().setProperty("fontFamily", "Courier");
labelB.getElement().getStyle().setFontSize(5, Unit.EM);
labelB.getElement().getStyle().setBackgroundColor("rgb(255, 0, 0)");
panel.add(labelA);
panel.add(labelB);
labelA.addMouseOverHandler(new FontMousOverHandler());
labelB.addMouseOverHandler(new FontMousOverHandler());
RootLayoutPanel.get().add(panel);
}
private static class FontMousOverHandler implements MouseOverHandler {
@Override
public void onMouseOver(MouseOverEvent event) {
Label label = (Label) event.getSource();
String font = label.getElement().getStyle()
.getProperty("fontFamily");
String color = label.getElement().getStyle().getBackgroundColor();
PopupPanel pp = new PopupPanel(true);
pp.add(new Label(font + " / " + color));
pp.setPopupPosition(label.getAbsoluteLeft(), label.getAbsoluteTop());
pp.show();
}
}
}
上面的示例经过了简化,您必须使代码更加智能,才能处理HTML属性、CSS样式名称和直接样式的所有变体。
第二个选项是获取当前位于鼠标指针下方的元素。这可以使用一些JSNI魔法来完成:
private native Element getElementFromPoint(int x, int y) /*-{
return $wnd.document.elementFromPoint(x, y);
}-*/;
当然,您需要一个触发器来调用getElementFromPoint()方法。您也可以使用鼠标处理程序或某种后台代码(也称为计时器)来触发。一旦知道鼠标指针在哪里,就可以获取元素并分析元素的样式。
- 使用谷歌应用程序脚本从工作表中获取值并将其显示在文本框中
- 如何获取经过编辑的文本
- 使用 jQuery 从下拉列表中获取所选文本
- 如何获取文本框组的值,并使用jquery将它们放入(key:Value)数组中
- 使用格式化文本获取 DIV 或跨度的动态宽度高度
- 通过搜索 td 文本获取嵌套表 ID
- 将 HTML 元素的文本获取到数组中
- 如何从响应文本获取 JSON 字符串到 JavaScript 中
- 如何根据选项文本获取选项索引
- 通过其文本获取dom节点
- 如何通过锚文本获取对象
- 在Javascript/JQuery中从超链接文本获取Href
- 如何将函数中的文本获取到此通知警报中
- 根据指定的文本获取标记
- 通过匹配文本获取json数据到数组中
- 如何通过id和输出文本获取选项元素
- 通过相邻的TH内部文本获取TD中的文本
- 如何将任何指定网页中的文本获取到变量中
- 通过内部文本获取所有元素
- 从给定的HTML文本获取JQuery