前提・実現したいこと
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
どうぞよろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー