[JavaScript] テキストボックスの現在のキャレット位置に文字列を挿入する

更新:

<input type="text">要素や<textarea>要素の現在キャレットがある位置に文字列を挿入するJavaScriptのサンプルです。jQueryを使用しています。

HTML

<button id="button">ABCを挿入</button>
<input id="input">
<script>
$('#button').click(function(){
	let elm = $('#input')[0];
	let value = $('#input').val();
	let head = value.slice(0,elm.selectionStart);
	let foot = value.slice(elm.selectionEnd);
	let newValue = head + 'ABC' + foot;
	$('#input').val(newValue);
});
</script>

ボタンを押すと現在のキャレット位置にABCを挿入します。文字列が選択状態のときは、その文字列をABCに置き換えます。

サンプルの解説です。head変数に先頭からキャレット開始位置までの文字列を格納、foot変数にキャレット終了位置から末尾までの文字列を格納。最後に、挿入したい文字列をheadとfootで挟み、要素にセットするという処理を行っています。

要素の現在のキャレット位置を取得するにはselectionStartプロパティとselectionEndプロパティを使用します。それぞれ先頭を0としたキャレットまでの文字数が整数で格納されています。

要素内の文字列が未選択状態のときは、selectionStartプロパティの値=selectionEndプロパティの値になります。要素内の文字列が選択状態のときは、selectionStartプロパティには選択開始位置が、selectionEndプロパティには選択終了位置が、それぞれ格納されます。

7行目,8行目のslice()メソッドは文字列から一部を切り取って返す関数です。第1引数に開始位置、第2引数に切り取る長さを指定します。第2引数が省略された場合は文字列の末尾までが切り取られます。