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

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

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

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

JavaScript

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

Q&A

0回答

1906閲覧

キャレットから最も近いHTMLタグのid属性を取得したい

退会済みユーザー

退会済みユーザー

総合スコア0

HTML5

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

JavaScript

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

0グッド

0クリップ

投稿2016/10/05 05:41

編集2016/10/12 06:30

contenteditableのdivでエディタを作っていて、キャレットから一番近いHTMLタグのid属性を常に把握していきたいのですが、これがうまくいきません。

idを常に把握しておきたい理由
下の画像のように、contenteditableなdivで作ったテキスト入力エリアの横に、画像やYouTubeを挿入するためのボタンを用意していて、それを挿入する場所を指定するため。
サンプル図
現状
divの中ではEnterを押すと新しい<p></p>を作成し、そこにランダムにidを割り振るようにしています。
そこで、あとはkeypressなどで現状のタグの中のidを把握できれば完了なのですが、そこがうまくいきません。

以下のようにやればできるかと思ったのですができず、他の方法を調べてもできる方法が見つかりません。
わかる方、教えてください。

HTML

1<div id='body-text' class='body-text' contenteditable=true data-placeholder='Body Contents'></div>

javascript

1var div = document.getElementById('body-text') 2div.addEventListener('keypress', onKeyPress) 3 4function onKeyPress(e) { 5 var check = document.activeElement 6 console.log(check.getAttribute('id'))//body-textが帰ってきてしまう、アクティブなのは親のdivだと判定されてしまうようです 7 }

追記
状況をわかりやすくするためにサンプルを作成しました。
以下のサンプルで現状とやりたいことを確認いただければと思います。
現状では<div>の最後の子要素としてYoutubeの埋め込みが入ってしまっているのですが、これを最後にキャレットが当たっていた場所に挿入するようにしたいです。

サンプル

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

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

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

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

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

MaShiRo_H

2016/10/12 02:44

もし解決済みでしたら申し訳ありませんが、いまいち画像やご説明から状況が掴みにくいので、今一度「contenteditableなdivで作ったテキスト入力エリア」の提示をお願いしてもよろしいですか?
退会済みユーザー

退会済みユーザー

2016/10/12 06:33 編集

コメントいただきありがとうございます。まだ解決できていなかったので助かります。jsfiddleで実際に動かせるサンプルを作り、質問欄に追加しておいたので、ご確認お願いします。ちなみに、この方法に固執しているわけではなく、他に挿入したい場所に挿入できるのであればどのような方法でもいいので教えていただきたいです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問