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

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

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

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

Sinatra

Sinatraは、Rubyで作られた オープンソースのWebアプリケーションフレームワークです。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

2回答

324閲覧

HTMLの置換とその状態の保存について

taka2

総合スコア14

JavaScript

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

Sinatra

Sinatraは、Rubyで作られた オープンソースのWebアプリケーションフレームワークです。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2019/06/30 11:40

編集2019/07/01 13:48

前提・実現したいこと

ウェブブラウザ上のテキストに範囲指定して、ボタンを押すなどしてそこの文字を隠して、マウスポインタを乗せたらもとにもどす。

発生している問題・エラーメッセージ

1.マウスポインタを乗せたらもとに戻るようにする方法がわからない。
2.範囲指定して隠した状態を幾つも保存しておく方法がわからない。
3.どのように隠せばいいのかがわからない。
4.下のソースコードだと、一つ文字を隠してから、もう一つ隠すと、1つめの文字が戻ってしまい、更に+と”が残ってしまう。

該当のソースコード

javascript

1 <input type="button" value="マーカー" onclick="CountSelectedChars()"> 2 <script> 3 function CountSelectedChars() { 4 var strObj = document.getElementById("text"); 5 var SelStr = document.getSelection(); 6 var regexp = new RegExp('('+SelStr+')', 'g'); 7 var a = strObj.innerText.replace(regexp, `<span style="color:transparent">+"$1"+</span>`); 8 document.getElementById('text').innerHTML = a; 9 } 10 </script>

何か不足している情報などがあったら言ってください。

HTML

1<!DOCTYPE html> 2<html lang="ja"> 3<head> 4</head> 5<body> 6 <p id="text"><%= @text %></p> 7 <br> 8 <input type="button" value="マーカー" onclick="CountSelectedChars()"> 9 <script> 10 function CountSelectedChars() { 11 var strObj = document.getElementById("text"); 12 var SelStr = document.getSelection(); 13 var regexp = new RegExp('('+SelStr+')', 'g'); 14 var a = strObj.innerText.replace(regexp, `<span style="color:transparent">+"$1"+</span>`); 15 document.getElementById('text').innerHTML = a; 16 } 17 </script> 18</body> 19</html>

イメージ説明

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

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

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

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

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

m.ts10806

2019/07/01 01:46 編集

>何か質問があったら聞いてください。 質問はあなたがしているものなのであくまで「不足している情報・確認事項」とすべきと思います。 既についている回答にも書かれていますが、「コピペで他者が再現できる情報」である必要がありますのでHTML、CSSなど適宜「コピペですぐ確認できる」状態のコードをご提示ください。
taka2

2019/07/01 09:18

わかりました、今すぐ訂正します
guest

回答2

0

下のソースコードだと、一つ文字を隠してから、もう一つ隠すと、1つめの文字が戻ってしまい、更に+と”が残ってしまう。

これはいかがですか?

js

1 function CountSelectedChars() { 2 var strObj = document.getElementById("text"); 3 var SelStr = document.getSelection(); 4 var regexp = new RegExp('('+SelStr+')', 'g'); 5 var a = strObj.innerHTML/* ←変更 */.replace(regexp, `<span style="color:transparent">$1</span>`/* ←変更 */); 6 document.getElementById('text').innerHTML = a; 7 }

投稿2019/07/09 02:38

Lhankor_Mhy

総合スコア36115

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

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

0

ベストアンサー

HTMLが無いと正確な回答は難しいですが、こんな感じで

javascript

1<script> 2window.addEventListener('DOMContentLoaded', function(e){ 3 document.querySelector('#marker').addEventListener('click',function(e){ 4 document.querySelector('#text span').style.visibility='hidden'; 5 }); 6 document.querySelector('#text').addEventListener('mouseover',function(e){ 7 e.target.querySelector('span').style.visibility='visible'; 8 }); 9}); 10</script> 11<input type="button" value="マーカー" id="marker"> 12<hr> 13test 14<div id="text" style="width:200px"><span>テキストテキストテキストテキストテキストテキストテキストテキストテキストテキスト</span></div> 15test

穴あき

穴あきのようにするには、隠したい文字をspanで囲むなどすればいいでしょう

javascript

1<script> 2window.addEventListener('DOMContentLoaded', function(e){ 3 document.querySelector('#marker').addEventListener('click',function(e){ 4 [].forEach.call(document.querySelectorAll('#text span'),function(x){ 5 x.style.visibility='hidden'; 6 }); 7 }); 8 document.querySelector('#text').addEventListener('mouseover',function(e){ 9 [].forEach.call(document.querySelectorAll('#text span'),function(x){ 10 x.style.visibility='visible'; 11 }); 12 }); 13}); 14</script> 15<input type="button" value="マーカー" id="marker"> 16<hr> 17test 18<div id="text" style="width:200px"><span>テキストテキスト</span>テキストテキスト<span>テキスト</span>テキストテキストテキスト<span>テキスト</span>テキスト</div> 19test

投稿2019/07/01 01:33

編集2019/07/01 11:33
yambejp

総合スコア114837

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

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

taka2

2019/07/01 09:44

これで全体を消すことはできました。任意の場所を指定して、そこで同じような処理をすることはできますか?
yambejp

2019/07/01 09:56

任意の場所というのは穴あき問題みたいにするのでしょうか?
taka2

2019/07/01 11:26

そういうことです。
taka2

2019/07/01 11:27

ごめんなさい、言葉が足らなくて。
yambejp

2019/07/01 11:33

追記しておきました
taka2

2019/07/01 11:36

その<span>で囲むのをユーザー側から任意ですることはできませんか?
yambejp

2019/07/01 12:06

> <span>で囲むのをユーザー側から任意でする インターフェースがイメージ付きません。 具体的にどのようなやり方でユーザーは任意に穴開きを設定するのか 手書きでいいので図示した画像など貼ってもらえませんか?
taka2

2019/07/01 12:59

わかりました
taka2

2019/07/02 09:45

写真載せました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問