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

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

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

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

JavaScript

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

jQuery

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

Q&A

解決済

2回答

2130閲覧

動的に追加した要素から document.execcommand()が効かない

alberorana

総合スコア52

HTML5

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

JavaScript

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

jQuery

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

0グッド

0クリップ

投稿2018/12/30 02:04

編集2018/12/30 03:42

前提・実現したいこと

jQueryで動的に追加した要素をトリガーに document.execcommand()を実行したいです。

自作のwysiwygエディタを開発していおり、document.execcommand()を利用してboldやunderlineなどなどの装飾を施したいのですが、以下のようなコードでjQueryで動的に追加した要素からだとうまく動作しません。

jQueryで動的に追加した要素から実行したい理由はツールバーの位置を固定したくないためです。
(編集する要素のすぐ上に出したい)

該当のソースコード

javascript

1//要素の中身変更 2$(document).ready(function(){ 3 $(".js-edit-area").on("click", function(){ 4 // propでクラスを取らないと生DOM操作後のクラスを反映してくれないため 5 if($(this).prop('class')=='js-edit-area') 6 { 7 window.editingDom = $(this); 8 $(this).wrap('<div id="editspace" contentEditable="true"></div>'); 9 $('#editspace').before('<ul class="js-edit-tools edit-tools">' 10 + '<li class="js-bold-button edit-tools__item">太字</li>' 11 + '<li class="js-underline-button edit-tools__item">下線</li>' 12 + '<li class="js-color-button edit-tools__item">文字色</li>' 13 + '<li class="js-edit-submit edit-submit edit-tools__item">変更を保存する</li>' 14 + '</ul>'); 15 $(this).removeClass('js-edit-area'); 16 console.log($(this).html()); 17 } 18 19 }); 20}); 21 22 23$(document).on("click", ".js-bold-button", function () { 24 document.execCommand("bold", true, "" ); 25 console.log($('#editspace').html()); 26}); 27 28 29$(document).on("click", ".js-underline-button", function () { 30 document.execCommand("underline", true, "" ); 31 console.log($('#editspace').html()); 32}); 33//要

試したこと

htmlファイルの方に書くと正常に動作します。

html

1<div id="toolbar"> 2 <button id="bold" class="js-bold-button">太字にする</button> 3 <button id="bold" class="js-underline-button">下線にする</button> 4</div>

'.js-edit-area' が割り当てられている要素(例)

html

1 <div class="contents_wrap flexContainer"> 2 <a class="js-edit-area" href="#">初回無料相談のお申し込みはこちら</a> 3 </div>

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

jQuery: 3.2.1
HTML5

どうぞよろしくお願いいたします。

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

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

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

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

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

s8_chu

2018/12/30 02:20

`.js-edit-area`の割り当てられた要素はどのようになっているか、質問文に追記していただけませんか?
alberorana

2018/12/30 03:38

.js-edit-areaは 編集したい項目に動的に wrapされるようになっておりまして、そのイメージを追記いたしますね。
guest

回答2

0

問題はマウスダウンで選択が解除されてしまうことなので、この動きを止めればテキストでも動きます。

jQuery

1$(document).on('mousedown', '.js-bold-button,.js-underline-button', function(event) { 2 event.preventDefault(); 3 return false; 4});

投稿2019/01/10 05:52

x_x

総合スコア13749

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

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

0

自己解決

【自己解決しました】
結論は liタグをbuttonタグにしたら動きました。
どうやらdocument.execcommand()のトリガーはliタグではだめなようでした。

投稿2018/12/31 00:57

alberorana

総合スコア52

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問