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

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

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

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

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

jQuery

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

2878閲覧

textareaのキャレットから行番号を取得する

IT35836826

総合スコア1

CSS3

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

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

jQuery

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

1グッド

1クリップ

投稿2020/05/08 10:38

前提・実現したいこと

HTMLのtextareaタグを使用してキャレット位置から行番号を取得したいです。
textareaタグのwrap属性は下記となります。
wrap="hard" cols="16"

問題となっているのは、ワードラップが発生した場合でも行番号が下記の通り取得できません。
【入力情報】
1行目:123456789012345(改行)
2行目:123456789△(ワードラップにより次の行に123456789012345が移動)
3行目:123456789012345(EOF)
→キャレット(カーソル)が3行目にあれば3を取得したいのですが、実際は2となってしまいます。
→△は半角空白、()は補足です。

何かいい方法はありませんでしょうか。

試したこと

・改行コードによる文章の分割 → ワードラップの対応ができない。
・改行コード or 1行の最大文字数の判定で行数を求める → ワードラップが発生すると2行目みたいにMAX文字数が設定されていないため判定できない。
・キャレット座標を取得するライブラリを活用(https://d.akiroom.com/2012-06/jquery-textarea-caret-position-javascript-library/)
→ワードラップに対応しておらず、ワードラップによって次行にいってもY軸は変更されなかった。

補足情報(FW/ツールのバージョンなど)

ブラウザは「Google Chrome バージョン: 81.0.4044.138」です。
HTML、CSS、Javascript(JQuery)を使用しております。
フレームワークは他に何か使う想定はありません。

AkitoshiManabe👍を押しています

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

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

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

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

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

guest

回答1

0

ベストアンサー

要件が「折り返しを改行と見なす「論理行」の行番号を取得したい」として、アイデアだけ出します。

  1. 対象のtextarea要素からline-height,padding等のテキスト表示に関連するconputedStyle値を抽出
  2. cloneNode()でtextarea要素を複製し、適当な場所にappendChild (visibility: hiddenでも期待通りに動作するかも)
  3. 対象のtextarea要素のvalueプロパティ値を変数valueに格納
  4. 変数value値を1文字ずつ抽出 -> 複製したtextarea要素のvalueプロパティに代入
  5. 前stepを繰り返し、scrollheightが上昇したら、行番号をインクリメント
  6. キャレット位置に到達するまで前stepを繰り返す
  7. 複製したtextarea要素をremoveChild

Re: IT35836826 さん

投稿2020/05/08 11:46

think49

総合スコア18162

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

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

IT35836826

2020/05/09 08:16

ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問