質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

2回答

2655閲覧

【jQuery】フォーム内の選択テキストの前後に任意のテキストを挿入する

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

1クリップ

投稿2017/05/23 10:03

編集2017/05/24 08:36

前提・実現したいこと

複数あるテキストフォーム(input type="text"、textarea)にフォーカスが当たっている状態で、テキストの一部又は全部を選択したときに、ボタンをクリックして対応するタグをテキストの前後に挿入したい。

試したこと

current = $(":focus");でカーソルが当たっている要素を取得し、window.getSelection().toString()で選択している範囲の値も取得できました。
ただここから、選択範囲の前後にタグを入れる方法がわかりません。

ボタンをクリックしたときに、currentに下のソースのようなことや、参考サイトのような.insertBeforeSelection('xxxx')を試しました。がcurrent..insertBeforeSelection is not a functionとconsoleにエラーがでています。うまくいきません。

javascript

1 2$(function(){ 3 4 ..... 5 6 var current; 7 var inputVal; 8 9 $("#contents input").focusin(function(){ 10 current = $(":focus"); 11 console.log(window.getSelection().toString()); 12 } 13 14 $('#btn').on('click', function(){ 15 current.selection('insert', { 16 text: 'test', mode: 'before' 17 }).selection('insert', { 18 text: 'test', mode: 'after' 19 }); 20 }); 21 22 ..... 23 24});

HTML

1<button id="btn" type="button">button</button> 2<div id="contents"> 3 4 ... 5 // input type="text"とtextareaは複数あります。 6 // appendして追加することもあります。 7 8 <div> 9 <input type="text" value="xxxxxxxxxxxx"> 10 </div> 11 <div> 12 <textarea></textarea> 13 </div> 14 15 ... 16 17</div>

お詳しい方、ご教示願います。

追記

参考サイト:https://weekendphp.com/jQuery/jquery.selection.html

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2017/05/24 00:23 編集

参考サイトはどこでしょう? エラーメッセージからするとinsertBeforeSelection()が未定義関数であるという状態なので、insertBeforeSelection()を定義すればひとまず目の前の問題は解決しそうですが。
退会済みユーザー

退会済みユーザー

2017/05/24 08:30

jQuery.selection というプラグインのインストールが必要でした。インストールせずにしていたので、未定義関数になっておりました。
m.ts10806

2017/05/24 08:30

ここでは目に付きにくいので質問内容に貼ってください。
退会済みユーザー

退会済みユーザー

2017/05/24 08:36

追記いたしました。
m.ts10806

2017/05/24 09:43

ありがとうございます。解決できたようで良かったです。
退会済みユーザー

退会済みユーザー

2017/05/24 09:44

ご指摘のおかげでインストールが必要なことに気づきました。ありがとうございました。
guest

回答2

0

ベストアンサー

ちょっとやってみました

javascript

1$(function(){ 2 var target; 3 $('#contents input,#contents textarea').on('focus',function(){ 4 target=$(this); 5 }); 6 $('#btn').on('click',function(){ 7 if(target){ 8 var v=target.val(); 9 var start = target.get(0).selectionStart; 10 var end = target.get(0).selectionEnd; 11 var pattern="^((?:[\r\n]|.){"+start+"})((?:[\r\n]|.){"+(end-start)+"})((?:[\r\n]|.)*)$"; 12 var reg=new RegExp(pattern,"gm"); 13 target.val(v.replace(reg,'$1[mae]$2[ato]$3')); 14 } 15 }); 16}); 17

投稿2017/05/24 03:16

yambejp

総合スコア114779

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/05/24 08:35

ありがとうございます。 プラグインをインストールしていなかったので、質問内容のエラーになっておりました。 プラグインをインストールすると目的を達成しました。 yambejp様の方法でも実現できましたので、ベストアンサーとさせていただきます。 ありがとうございました。
guest

0

jQuery.selectionというプラグインが必要で、インストールしていなかったためエラーになっていました。
プラグインをインストールしたところ正常に動作しました。

投稿2017/05/24 08:37

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yambejp

2017/05/24 08:39

なるほど、それは気がつきませんでした
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問