[解決済み] テキストエリア内のキャレットの列(ピクセルではない)位置を最初から文字単位で取得するにはどうしたらよいですか?
2022-04-22 18:58:29
質問
のキャレット位置はどのように取得するのですか?
<textarea>
JavaScriptを使用していますか?
例えば
This is| a text
これは、以下を返すはずです。
7
.
カーソルや選択範囲を囲む文字列を返すようにするにはどうしたらいいでしょうか?
例
'This is', '', ' a text'
.
という単語がハイライトされている場合、次のように返されます。
'This ', 'is', ' a text'
.
解決方法は?
FirefoxやSafari(その他のGeckoベースのブラウザ)では、textarea.selectionStartを使えば簡単にできますが、IEではうまくいかないので、以下のような工夫が必要になります。
function getCaret(node) {
if (node.selectionStart) {
return node.selectionStart;
} else if (!document.selection) {
return 0;
}
var c = "\001",
sel = document.selection.createRange(),
dul = sel.duplicate(),
len = 0;
dul.moveToElementText(node);
sel.text = c;
len = dul.text.indexOf(c);
sel.moveStart('character',-1);
sel.text = "";
return len;
}
( ここでコードを完成させる )
また、jQueryの フィールド選択 プラグインを使用すると、このようなことが可能になり、さらに多くのことができるようになります。
編集する 実際に上記のコードを再実装してみました。
function getCaret(el) {
if (el.selectionStart) {
return el.selectionStart;
} else if (document.selection) {
el.focus();
var r = document.selection.createRange();
if (r == null) {
return 0;
}
var re = el.createTextRange(),
rc = re.duplicate();
re.moveToBookmark(r.getBookmark());
rc.setEndPoint('EndToStart', re);
return rc.text.length;
}
return 0;
}
例を確認する こちら .
関連
-
vueのプロジェクトでモックを使用する方法を知っていますか?
-
[解決済み】TypeErrorの解決方法。未定義またはヌルをオブジェクトに変換できない
-
[解決済み】(Google Map API) Geocodeは以下の理由で成功しませんでした。REQUEST_DENIED
-
[解決済み] 正規表現で変数を使うには?
-
[解決済み] 私のJavaScriptコードは "No 'Access-Control-Allow-Origin' header is present on requested resource "というエラーを受け取りますが、Postmanはそうならないのはなぜですか?
-
[解決済み] JavaScriptでカンマを桁区切りにして数値を表示する方法
-
[解決済み] JavaScriptのオブジェクトの配列からidでオブジェクトを検索する
-
[解決済み] オブジェクトの配列から、プロパティの値を配列として取り出す。
-
[解決済み] JavaScriptでUnixのタイムスタンプを時刻に変換する
-
[解決済み] JavaScriptでテキスト入力フィールドの値を取得するにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Vueの要素ツリーコントロールに破線を追加する説明
-
vueが定義するプライベートフィルタと基本的な使い方
-
[解決済み] テスト
-
[解決済み】JavaScriptエラー(Uncaught SyntaxError: Unexpected end of input)
-
[解決済み】ERROR エラーです。スイッチのname属性が指定されていないフォームコントロールの値アクセッサがない
-
[解決済み】(Google Map API) Geocodeは以下の理由で成功しませんでした。REQUEST_DENIED
-
nodejs unhandledPromiseRejectionWarning メッセージ
-
[解決済み】キャッチペースト入力
-
[解決済み】テキスト入力フィールド内のカーソル位置(文字数)を取得する。
-
[解決済み] Textareaで "shift+enter "を検知して改行するには?