如何获取GWT HTML选定文本?

时间:2013-12-05 14:13:00

标签: java html gwt

我需要一个Widget来正确显示文本,包含HTML元素。因此我使用了GWT HTML-Widget。

HTML text= new HTML(new SafeHtml() {

            @Override
            public String asString() {

                return "<b>TestText</b>";
            }
        });

现在我想选择该窗口小部件显示的文本,并以某种方式获取字符串。

我想右键单击标记的文本,并使用该字符串

执行某些操作

如果你的想法使用其他gwt小部件也没问题,我不太关注那个HTML小部件。

我也可以访问Sencha GXT libarys。 任何想法都将不胜感激。

3 个答案:

答案 0 :(得分:0)

你可以这样使用:

final Label label = new Label("Some text");
label.addClickHandler(new ClickHandler() {          
        @Override
        public void onClick(ClickEvent event) {
                label.getElement().getStyle().setBackgroundColor("#ff0"); //sth. like select
                String txt = label.getText(); //get the String
            Window.alert(txt); //do sth. with text

        }
});

但它适用于左键单击。如果必须使用右键单击,则可以使用例如本机JS代码。 jQuery点击。 并且不要使用b标签。它在HTML5中已弃用。

答案 1 :(得分:0)

我假设您希望用户选择文本,然后右键单击检索所选文本。我对吗?我不记得在GWT中检索选定文本的任何方法,所以我会使用纯javascript。已经a thread解释了如何使用javascript,因此您可以获取该代码并将其包装在JSNI方法中:

public class MyClass implements IsWidget {
    private final HTML text;

    public MyClass() {
        text = new HTML(SafeHtmlUtils.fromTrustedString("<b>Some text</b>"));
        text.addDomHandler(new ContextMenuHandler() {
            @Override
            public void onContextMenu(ContextMenuEvent event) {
                String test = getSelection();
                Window.alert(test);
            }
        }, ContextMenuEvent.getType());
    }

    private native String getSelection() /*-{
        var text = "";
        if ($wnd.getSelection) {
            text = $wnd.getSelection().toString();
        } else if ($doc.selection && $doc.selection.type != "Control") {
            text = $doc.selection.createRange().text;
        }
        return text;
    }-*/;

    @Override
    public Widget asWidget() {
        return text;
    }
}

答案 2 :(得分:0)

我实际上找到了一个可以获取所选文本的GWT-Libary。 观看此https://code.google.com/p/gwt-selection/

安装图书馆后,我不得不

String currentSelection = Selection.getBrowserRange().getText();

感谢您的回答 - 您帮助了我很多