【実現したいこと】
マウスをドラッグしてテキストを範囲選択する。
特定のボタンをクリックすると、範囲選択中の文字がjQueryで装飾(文字を赤く)される。
※昨日、teratailにて質問させて頂き、「範囲選択中の文字をjQueryで取得してalertで表示する」ことは叶ったのですが、その応用で上記の装飾に挑戦したところ、見事に挫けてしまいました。
書いたコード
// html <div class="sample-button">このボタンを押すと選択範囲中のテキストを装飾</div> <div contenteditable="true" class="sampe-textarea">ここに文章があり、この文章内の任意の箇所を範囲選択したいです。</div> // jQuery <script> $(function(){ const selection = getSelection(); var selectText = ''; var start,end,focus; $(document).on('selectionchange',function(){ focus = selection.focusNode; //選択範囲の終点を含むノード // 指定されたノードのDOMツリー内の親ノードが.sampe-textareaのとき if(focus.parentNode.closest('.sampe-textarea')){ setTimeout(()=>{ start = selection.anchorOffset; end = selection.focusOffset; selectText = focus.data.substring(start,end); },100); } }); $('.sample-button').on('click',function(){ selectText.replaceWith('<span style="color:#ff0000;">' + selectText + '<span>'); // alert(selectText); と記載すると、範囲選択した文字がalertされるので、文字は選択できているはずです。 }); }); </script>
問題点
テキストを範囲選択後、ボタンをクリックすると、Chromeのconsoleで、
Uncaught TypeError: selectText.replaceWith is not a function at HTMLDivElement.<anonymous>
上記のように表示されます。
テキストを範囲選択後、ボタンを「クリック」することで、それまで範囲選択していたテキストを装飾(文字を赤く)する方法がわからずにおります。
もし、上記についておわかりになる方がいらっしゃいましたら、どうかご教授いただけましたら幸いです。
何卒、よろしくお願い申し上げます。
回答1件
あなたの回答
tips
プレビュー