2012-09-23 9 views
6

GWT RichTextAreaでcusrorの位置を設定する方法はありますか? TextAreaではそうするためにメソッドsetCusrorPosition()がありますが、RichTextAreaではそうはありません。 RichTextAreaのカーソル位置を設定できるネイティブJavaScript(GWTから呼び出された)がありますか?GWT RichTextAreaのカーソル位置を設定する方法

答えて

1

RightTextAreaはsetSelectionRangeメソッドを提供していませんが、JSNIを使用して作成しました。

final RichTextArea tr = new RichTextArea(); 
    Button b = new Button("Test"); 
    b.addClickHandler(new ClickHandler() { 

     @Override 
     public void onClick(ClickEvent event) { 
      setSelectionRange(tr.getElement(), 15, 20); 
      tr.setFocus(true); 
     } 
    }); 
    RootPanel.get().add(tr); 
    RootPanel.get().add(b); 

注:「POS」と「長さ」の検証チェックを入れることを忘れないでください、あなたは以下

public native void setSelectionRange(Element elem, int pos, int length) /*-{ 
    try { 
     var selection = null, range2 = null; 
     var iframeWindow = elem.contentWindow; 
     var iframeDocument = iframeWindow.document; 

     selection = iframeWindow.getSelection(); 
     range2 = selection.getRangeAt(0); 

     //create new range 
     var range = iframeDocument.createRange(); 
     range.setStart(selection.anchorNode, pos); 
     range.setEnd(selection.anchorNode, length); 

     //remove the old range and add the newly created range 
     if (selection.removeRange) { // Firefox, Opera, IE after version 9 
      selection.removeRange(range2); 
     } else { 
      if (selection.removeAllRanges) { // Safari, Google Chrome 
       selection.removeAllRanges(); 
      } 
     } 
     selection.addRange(range); 
    } catch (e) { 
     $wnd.alert(e); 
    } 
}-*/; 

コード以下の方法の書き込みを超える使用の場合は、方法であり、 setSelectionRange()メソッドを渡します。 このコードはIE9、FF、Chromeでテストされています。

+0

これはGWT 2.5では私にとってはうまくいきません。それはカーソルを動かしますが、予測できません。長さパラメータはカーソルの位置に影響します。選択範囲は決して範囲ではなく、常にカーソルを移動するだけです(ハイライトなし)。 – Zip184

+0

richtextareaの代わりにcontenteditable divを使用できます。 –

1

これがまだ必要なのかどうかはわかりませんが、私はこれを一日中やり遂げようと努力しており、最終的に解決策を見つけ出すことができました。これはChrome/Safariでのみテストされています。誰かを助けることを願っています。

このコードは、マイナー構文エラーを修正するために2016年11月28日に編集されました。

関連する問題