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

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

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

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

JavaScript

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

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

1回答

3374閲覧

リッチエディットなtextareaの仕組み(一部の文字列の装飾など)

nnahito

総合スコア2004

HTML5

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

JavaScript

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

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

1クリップ

投稿2018/11/11 12:07

やりたいこと/知りたいこと

EvernoteSimpleMDEのような、
テキストエリアを太文字などの拡張可能なエディタにしたい。

やってみたこと

  1. こちらの記事を参考に、textareadiv要素を準備
  2. textarea要素を画面外(left: -1000など)に配置し、div要素のwidthとheightを100%に
  3. divがクリックされたらfocusをtextareaに当てる
  4. keyupイベントを拾い、textareaの文字をdivに描画

この方法を使うことで、対象の文字列を置換する(例:対象の文字列 -> <b>対象の文字列</b>)事により、
太文字などの一部の文字列の装飾が可能になりました。

しかし、ドラッグのハイライトや、コピー&ペースト、キャレットの表示などがかなり困難です。

また、Twitterのつぶやきを行うボックスでは、contenteditable=trueという要素を使っているようですが、
実際に使ってみたところ、大量のテキストを入力するには向いていない気がします(動きがカクカクし始める)。

そこでevernoteやSimpleMDEで作成される編集部分を開発者ツールで見てみたところ、
両者とも、私の作成した方法や、contenteditableの利用は行っておりませんでした。

そこから処理を追えたら良かったのですが、どのような仕組みで動いているのかがわからず、今に至ります。
ご存知の方がいらっしゃいましたら、ご教示いただけますと幸いです。

所管

SimpleMDEをずっと観察しているのですが、
キャレットは独自のCSSを当て、ブライトさせており、
入力文字はpreタグの中にしまわれていっています。

textareaタグは存在しており、そこと連携しているようなのですが、
どのような流れかがわかりません。
また、キャレットの横に常にtextareaがついて回る挙動も、謎です。。。

参考

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

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

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

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

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

guest

回答1

0

ベストアンサー

質問者さんの実現したい内容と違ったら申し訳ございません。また、セキュリティ的な面からいうと直接での利用は避けた方がいい方法です。

PHP

1<html lang="ja"> 2<head> 3<meta charset="UTF-8"> 4<title>jQuery</title> 5<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script> 6<script> 7$(function(){ 8$('#preview').bind('keyup change', function(){ 9$('#preview_area').html($("#preview").val()); 10}); 11}); 12</script> 13</head> 14<body> 15<input type="button" onclick="document.getElementById('preview').value='<b>ここに書いて</b>'">太字</input> 16<table> 17<tr> 18<td> 19<form action="./index.php" method="post"> 20<textarea id="preview" style="width:200px; height:100px;"></textarea> 21</form> 22</td> 23<td style="border:1px solid; width:200px; height:100px;" id="preview_area"> 24</td> 25</tr> 26</table> 27</body> 28</html>

投稿2018/11/11 13:37

編集2018/11/11 13:46
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2018/11/11 13:52

もしかしたらですが、simpleMDEさんもcontenteditableを利用しているかもしれません。contenteditableで検索すると数カ所見つかりました。また、contenteditableはwordpressでも採用されているそうです。
nnahito

2018/11/12 13:10

ご回答有り難うございます。 contenteditable使われているのですね…… となると開発者ツールで見たいときの仕組みがよくわかりませんね…^^; ありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問