• ベストアンサー

TextAreaのinsert

TextAreaで現在のキャレット位置に任意文字列が入るようにしたいのですが、たとえば、 textarea.insert( "aaa", textarea.getCaretPosition() ); という風にすると、現在位置ではないところに挿入されます。 どうやら、(現在のキャレット位置+行数)の位置に文字列が挿入されてしまうようです。 行数を割り出してgetCaretPosition()から引く方法も考えられるのですが、他によい方法はなにかありませんでしょうか。 よろしくお願いします。

  • Java
  • 回答数1
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • Gishi
  • ベストアンサー率57% (11/19)
回答No.1

試してみたら、たしかに同じような結果になりました。 確信はないですけど、おそらくJava実行環境(JRE)の バグではないかと思います。 このように書けば回避できるようです。 int caret = textarea.getCaretPosition(); String text = textarea.getText(); text = text.substring(0, caret) + "aaa" + text.substring(caret); textarea.setText(text); 蛇足ですけど、 TextArea上で現在選択されているテキストを 置き換えるようにしたいなら、下のように書きます。 int start = textarea.getSelectionStart(); int end = textarea.getSelectionEnd(); String text = textarea.getText(); text = text.substring(0, start) + "aaa" + text.substring(end); textarea.setText(text);

takuro4
質問者

お礼

できました!ありがとうございます!

関連するQ&A

  • DOMの要素ををtextarea(dropした位置

    jquery ui のdraggable,droppableを使って、あるDOMの要素ををtextarea(dropした位置)に挿入したいです。 ドラッグ、ドロップは普通に動かせるのですが、以下の機能が実装できません。 情報お持ちの方、いらっしゃいましたら、お願いします。 ドラッグ中、または、ドロップした瞬間に、textareaのキャレット位置を取得する 実装方法が思いつきません。 (ドロップ時点です。) 欲を言えば、ドラッグ中にキャレット位置を表示させたいです。 ※ちょうど、chromeやFFで画像をテキストエリアにドラッグするようなイメージです。

  • textareaの現在の行インデックスを取得する

    対象ブラウザはGoogle Chromeです(IEでは解決済み) textareaのボックス内で、現在キャレットが位置する行インデックスを 取得したいのですが、どうすればよいでしょうか。 最終的にやりたいのはオートインデントです。 textarea内でEnterキーを押した時に、その行の先頭のスペースの数を調べて 次の行の先頭に同じ数のスペースを自動で挿入します。 このため、Enterキーを押した瞬間の行インデックスを取得する必要があります。 その後の処理であるスペースの挿入は方法が分かっているので問題ありません。 よろしくお願い致します。

  • javascriptでtextareaに文字列を追加したい

    textareaの最後尾に文字列を追加したいです。 いろいろサイトを検索してみたのですが、解決できず困っています。  <form>中に<textarea>とボタンを設定しておきボタンを押すと  文字列を最後尾に追加する。 というのはありました。 私は、ボタンは無しで、画面を読み終わったタイミングで、textareaの最後尾に文字列を追加したいのです。 (仕様で、bodyタグにonloadを記述することは出来ません。) (またcgiでHTML記述を生成しています。) が、どこかのサイトにあった例を見ても、どのように自分のソースに 反映したらよいのか分からず・・・。 サイトにあった例を参考に、下記のように記述してみましたが駄目でした。 <textarea name="textArea_A"></textarea> <SCRIPT LANGUAGE="JavaScript"> <!-- var objTextarea = document.getElementsByName('textArea_A')[0]; objTextarea.value += "AAA"; //--> </SCRIPT> (これで、<textarea name="textArea_A">AAA</textarea> となってくれると良いのですが・・・。) トンチンカンな意味不明な点があるかも知れませんが、 どうか宜しくお願いいたします。

  • textareaタグに入力された改行コードの扱い

    PHPとMySQLを利用して簡単なWEBアプリを作っています。 <textarea>内に入力された文字列をMySQLにINSERTする際、使用しているブラウザによって改行コードの文字数が異なるため、MySQLにINSERTされる文字数が異なってしまいます。具体的にいうと、 --MySQL仕様-- <textarea>内のデータを、MySQLのとあるtableにINSERTする。 そのtableの<textarea>のデータを登録するcolumnにvarchar(1000)を指定している。 --PHP仕様-- <textarea>内のデータをPOSTより受け取り、其の生データを上記設定したcolumnにINSERTする。 (文字数チェックの際、\r\nを\nに変換し、改行コードを1文字として解釈させ、カウントしている。) そのデータを訪問者が閲覧できるようにpreg_replaceで改行コードを<br />に変換し表示している。 INSERTされたデータは再編集できるよう、編集ページを設けている。 ◆問題 ブラウザごとで<textarea>内の改行コードが異なるため、文字数カウントの際、\n、\r、\r\nによって文字数にズレが生じてしまい、その結果varchar(1000)で設定したcolumnでは使用したブラウザによってINSERT可能な文字数が異なってしまう。 ◆質問 ブラウザによって出力される改行コードが異なるため、MySQLのtableにINSERTされる文字数が異なってしまいます。改行コードを1文字と解釈し、ブラウザによる差異をなくす良い方法はありませんか? --自身で考えた方法-- ・varchar(1000)を例えばvarchar(1200)などとし、PHP側のみで文字数の制限を掛ける。 ・一部のサイトでは\r\nを\nに変換し、INSERTするって方法が記載ありました。この方法を選択すると、再編集のページでブラウザを判別し、\nを\r\nに変換する手間があるので仕様変更に手間がかかりそう。 以上となります。独学の自分には「自身で考えた方法」しか思い浮かばず、MySQLに登録する際、ブラウザによる改行コードの文字数の差異の良い方法が浮かびませんでした。何か良い方法をご教授いただけませんでしょうか?宜しくお願いします。

    • ベストアンサー
    • MySQL
  • TEXTAREAと改行について

    環境:ASP(VBScript) DB:Access2000 初心者です。 HTMLのTEXTAREAで入力した文字列を DBに書き込むと最初の改行以降が書き込まれません。 なにがいい方法はありませんか?

  • Perlの文字列置換について

    Perlで文字列置換の業務をすることになりした。 Struts1からStruts2のJSPのタグの変換です。 (1)html:textarea property="aaa" styleClass="bbb" (2)s:textarea name="aaa" cssClass="bbb" (1)から(2)に変換したいです。 「html:textarea」が「s:textarea」に対応しており、その属性の「property="aaa"」が「name="aaa"」に対応、 「styleClass="bbb"」が「cssClass="bbb"」に対応するといった内容です。 aaaとbbbは任意の文字列 if ($str =~ /html:textarea/ ) { $str =~ s/html:textarea/s:textarea/; $str =~ s/property=\"(.+)\"/name="$1"/; $str =~ s/styleClass=\(.+)"\"/cssClass/; というように参考書を元に作成してみたのですが、変換は行われるものの、属性のpropertyとstyleClassの順番が逆だったり、ここに記載していない他の属性を間に入れたりすると変換ができません。 どなたか教えて下さい。

    • ベストアンサー
    • Perl
  • 別ウインドウから、textarea内のカーソル位置に文字を挿入。

    別ウインドウから、textarea内のカーソル位置に文字を挿入。 お世話になっております。 やりたいことは、以下のような感じです。 2つのウインドウ(ページA、ページB)があります。 ページAには、textareaがあります。 textareaにデータを入力後、 マウスでtextarea内のデータの特定の位置をクリックし、 カーソルを置いておきます。 この状態で、ページAにあるコマンドボタンをクリックすると、 ページBが開きます。 ページBには、いくつかコマンドボタンが表示されていて、 このうち、どれか1つをクリックすると、 ページBが閉じられ、かつ、 ページBで選択したコマンドボタンに設定されている値が、 ページAのtextarea内のカーソル位置に挿入される。 ・・・以上のような感じのことをやりたのです。 ページA内のコマンドボタンからページBを開くのは、 windows.open(URL) で開くことができました。 ページBでコマンドボタンを選択した際、 window.close() でページBを閉じるところまではできたのですが、 値をページAのtextareaに挿入するところが、うまくいきません。 (↓こんな感じなのかと思うのですが・・・) window.close(); var str1 = document.getElementById(textareaのid).value; var str2 = "aaa"; // 挿入したい値 var p = document.getElementById('textareaのid').selectionStart; document.getElementById(textareaのid).value = str1.substr(0, p) + str2 + str1.substr(p, str1.length); どなたかご教授願います。 よろしくお願いします。

  • <textarea>に<pre>を使うと・・・

    質問お願いします。 htmlとcgi等を使用してHPを作っているのですが、その中にtextareaを利用して、 投稿フォームを設けています。投稿したものは、違うページで閲覧できるようになっています。 この投稿フォーム、wordやexcelから文章をコピぺして使用する方が多いのですが、 そのままでは<P>タグが挿入されてしまい、閲覧時、文章間隔が広くなりすぎて見難いため、 投稿フォームを、<textarea><pre></pre></textarea>とし、受信時、cgiで<P>タグを削除しています。 レイアウトはこれで問題ないのですが、textarea内に<pre>タグを入れてしまうと、 textareaの横幅をオーバーして書き込めてしまうという事態が起こってしまいました。 そこで質問なのですが、textarea内に<pre>を入れても、文字入力が端まで行ったら、 次の行に折り返す方法はないでしょうか? わかる方いらっしゃいましたら、ご教授の程よろしくお願いします。

    • ベストアンサー
    • HTML
  • OracleでINSERT文のループ

    INSERT文で何万件ものデータをテーブルに挿入したいのですが、 SUBSTRBまたはSUBSTR関数で何バイト分あるいは何文字分抽出して その部分の値をインクリメントさせる記述のしかたがわかりません。 INSERT INTO aaa (ID,YEAR,CLS,NO,THING,CD,LAND,USER,GROUP) VALUES ('30000003000','2000','2','85000','001','55555','10','test','1'); INSERT INTO aaa (ID,YEAR,CLS,NO,THING,CD,LAND,USER,GROUP) VALUES ('30000003001','2000','2','85001','001','55555','10','test','1'); INSERT INTO aaa (ID,YEAR,CLS,NO,THING,CD,LAND,USER,GROUP) VALUES ('30000003002','2000','2','85002','001','55555','10','test','1'); INSERT INTO aaa (ID,YEAR,CLS,NO,THING,CD,LAND,USER,GROUP) VALUES ('30000003003','2000','2','85003','001','55555','10','test','1'); ・ ・ ・ と、いう感じで、IDとNOのみ、値をインクリメントさせて大量のデータを 挿入したいのですが、SUBSTRB関数やループなどを使って効率的に行うやり方がわかりません。どなたか、ご教授ください。

  • textarea内の<script>~を出力したい

    現在、java scriptを使ったブログを作成しているホームページ制作初心者です。 textareaに入力した文字列を指定の<div id="~"></div>に出力するといった事を試しており、textarea内が一般的な文字列であったり、html言語であれば、出力に成功することができました。 ただ、そのtextarea内の文字列を<scritpt scr=" ... ">~</script>とした場合、外部ファイルに記載されているスクリプトを起動する事ができません。ソースを確認すると、その場所にjava scriptがちゃんと入っているのですが、全く動かないという状況です。 そこで質問なのですが、指定のjava scriptを、リロードが完全に終わった後でも、呼び出しを行うということはできるのでしょうか? 具体的には、ツイッターの公式ウィジェットを使った場合であれば、 <textarea style="display:none;" name="~" rows="7" cols="65"> <script src="http://widgets.twimg.com/j/2/widget.js"></script><script>new TWTR.Widget({version: 2,type: 'search',search: '文字列',interval: 5000,title: 'タイトル文字列'',subject: '',width: 500,height:350,theme:{shell:{background: '#333333',color: '#ffffff'},tweets: {background: '#ffffff',color: '#444444',links: '#1985b5'}},features: {scrollbar: false,loop: true,live: true,hashtags: true,timestamp: true,avatars: true,toptweets: true,behavior: 'default'}}).render().start();</script> </textarea> とした上で、このtextarea内の文字列を他のdivの中に書き込みを行う、というところまでは成功したのですが、このjava script本体が起動せず、その部分が空白として表示されてしまうといった次第です。 もし何か解決策があれば、ご教授頂ければと思い質問しました。よろしくお願いします。

専門家に質問してみよう