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

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

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

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

JavaScript

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

Q&A

解決済

1回答

379閲覧

特定の文字列で囲まれた範囲をmark(黄色マーカー)したいです

mizuno12

総合スコア5

HTML5

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

JavaScript

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

0グッド

1クリップ

投稿2022/05/11 05:21

編集2022/05/11 05:25

下記の様に<math></math>で囲まれた文字列があったときに,囲まれた全ての文字列を黄色マーカーで強調したいです。
※ブラウザ画面上にはタグの状態で表示する想定です。

html

1<math><mstyle displaystyle="true"><mi>v</mi></mstyle></math>

HTMLで以下のようにボタンを設置し,mark()を実行すると,黄色マーカーで強調できるようにしたいです。

html

1<button onclick="mark()">mathマーク</button>

jsでmark()を記述しようとしているのですが,どの様に書けばいいでしょうか?

js

1function mark() { 2 }

なにかいい方法があれば教えて下さい。

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

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

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

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

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

int32_t

2022/05/11 05:54 編集

<p>ほげ &lt;math>...&lt;/math> ほげ</p> のような入力で <p>ほげ <mark>&lt;math>...&lt;/math></mark> ほげ</p> のような結果を得たい、という要望で合ってますか。
mizuno12

2022/05/11 05:56

はい。合っています。
guest

回答1

0

ベストアンサー

こういうケースでは、HTMLのソースであらかじめ「後でマークされるテキスト」を区別できるようにしておいて、ボタンが押されたらスタイルだけ変更するのが簡単です。

html

1<p>ほげ <span class="will-be-marked">&lt;math>...&lt;/math></span> ほげ</p> 2<style> 3.marked { 4 background-color: Mark; 5 color: MarkText; 6} 7</style> 8<script> 9function mark() { 10 // querySelectorAll('.will-be-marked') のそれぞれに対して、 11 // classList.add('marked') を実行する 12} 13</script>

HTMLのソースを事前に変更できない場合は別の手段が必要で、けっこう面倒です。
とくに、<p>ほげ &lt;math>.. <span>.&lt;/math></span> ほげ</span></p> のように開始地点と終了地点が別の要素に入っているケースもサポートするとかなり手間がかかります。
そうではない場合は、
TreeWalkerなどですべてのTextノードを先頭から処理し、
Textノードの中からマークしたい文字列を検索、
マークしたい文字列の先頭のTextノードとオフセットを記録、
マークしたい文字列の最後のTextノードとオフセットを記録、
それらの情報でRangeオブジェクトを作り、Range.surroundContents()<mark>で囲む

以上で可能かと思います。

投稿2022/05/11 06:07

編集2022/05/12 08:35
int32_t

総合スコア20884

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

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

mizuno12

2022/05/11 23:29

ありがとうございました。HTMLソースを事前に変更できない状況なので,なにか良い方法がないか考えてみます。
int32_t

2022/05/11 23:43

<math>と</math>の間にHTMLのタグが入ることはありますか?
mizuno12

2022/05/12 07:44

それはないです。
int32_t

2022/05/12 08:36

> それはないです。 その条件での解決方法を回答に追記しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問