
jQueryで、<span>タグの中の"test"を"Hello world!"に書き換えた後に、その文字列の"Hello"の部分の色を変更し、その後に、"Hello world"の真ん中の半角スペースを"␣"に変えたいと思い下記のように書きました。コメントアウトの①と②の処理を行うと、①が実行後に、②の処理で①の処理が消されてしまい、結果②だけの出力となります。①と②を同時に反映させるには、どのような書き方にすればよいでしょうか?
また、今回のコードは文字列に対して2つ処理ですが、これを同じように、③、④・・・と似たような処理を増やしていくことは可能でしょうか?
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title></title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2 …
</head>
<body>
<script>
$(document).ready(function(){
$('#text').html('Hello world!');
var text = $('#text').text();
$('#text').html(text.replace(new RegExp("Hello","g"),'<span style="color:#FF1493">Hello</span>')); //①
$('#text').html(text.replace(new RegExp( "\\s","g"),'␣')); //②
});
</script>
<span id="text">test</span>
</body>
</html>
No.3ベストアンサー
- 回答日時:
純粋なテキストだけを対象に置換を行うならば、単純に replace を重ねてください。
例)
var text = $('#text').text();
text = text.replace(/\s/g, '空白');
text = text.replace(/\d/g, '数字');
$('#text').text(text);
置換対象や置換後の文字列に HTML 構造が含まれる場合は、
HTML 要素の木構造を探って、再帰的にテキスト部を切り出し、
要素単位で置換する処理が必要となります。
例)
$('#text').each(function(){
_ R(this, /\bHello\b/i, {color:'red'}); // 見つかった箇所に span で色を付ける
_ R(this, /\bWorld\b/, 'heaven'); // 見つかった箇所をテキストで置換する
});
function R(node, re, textOrStyle) {
_ if (node.nodeType == 1) {
_ _ var a = Array.prototype.slice.apply(node.childNodes);
_ _ for (var i in a) arguments.callee(a[i], re, textOrStyle);
_ _ return;
_ } else if (node.nodeType != 3) {
_ _ return;
_ }
_ var t = node;
_ while (true) {
_ _ var m = re.exec(t.data);
_ _ if (!m) return;
_ _ var tb = (m.index == 0)? t: t.splitText(m.index);
_ _ var tc = tb.splitText(m[0].length);
_ _ if (typeof textOrStyle == 'object') {
_ _ _ var el = document.createElement('span');
_ _ _ var s = textOrStyle;
_ _ _ for (var n in s) el.style[n] = s[n];
_ _ _ el.textContent = m[0];
_ _ _ tb.parentNode.replaceChild(el, tb);
_ _ } else {
_ _ _ tb.textContent = textOrStyle;
_ _ }
_ _ t = tc;
_ }
}
ありがとうござまいす。返答を頂くまえに、なんとか自力で完成させたのですが、
回答者様が書かれたコードの方が、圧倒的に汎用性が高く、こんな書き方もあるのかと、非常に勉強になります。
No.1
- 回答日時:
「①が実行後に、②の処理で①の処理が消されてしまい」と書いているということは, 原因を理解できていないんじゃないだろうか.
①でテキストを書き換えてるけど, 変数 text の中身は変わってないよね. だから, ①で書き換える*前*のテキストに対して②で置き換えた結果になってる.
ありがとうございます。
var text = $('#text').text();
$('#text').html(text.replace(new RegExp("Hello","g"),'<span style="color:#FF1493">Hello</span>')); //①
text = $('#text').text(); //追加※1
$('#text').html(text.replace(new RegExp( "\\s","g"),'␣')); //②
※1を追加しました。
書き換えたものを、もう一度取得して、変数textに入れて、それにもう一度、処理を加えるようにしました。この状態ですと、②の処理で、書き換えられてしまいます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript jqueryを使ったスムーススクロールのコードを書いたのですが、HTMLコード内にある、a butt 2 2022/04/14 10:59
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/30 09:10
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- JavaScript switch文のswitch(n)の部分を複数の値にするか、if文に変えてほしいです。 1 2022/07/27 17:18
- JavaScript javascriptのちょっとした動作不良(原因は突き止めたのですが) 1 2023/06/15 19:58
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- JavaScript GoogleChart 階層ごとのブロックの長さを個別に設定したい 1 2022/07/06 14:27
- JavaScript HTMLでJavaScriptを使ってパスワードの強化判定のプログラムを作成しています。 一通り作っ 2 2022/10/19 01:41
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
JavaScriptでiframeの内容を「...
-
SCRIPT5007: 未定義または NULL...
-
htaでVBSのソースを書いたらエ...
-
フォーカス移動抑止について
-
function の return 値を表示し...
-
javascriptについて
-
日付のチェック
-
教えてください
-
JavaScriptでの西暦下2桁での表...
-
getElementsByNameで要素が取得...
-
クリックすると別の文章を表示する
-
JavaScript でキーを送る
-
XMLHTTPRequestでstatusが0に
-
<a href="#" …>の意味を教えて...
-
html メールリンクにて自動ファ...
-
特定のウィンドウ名を持つウィ...
-
<FORM>タグのtargetに値を書込...
-
ページを表示すると同時に複数...
-
別ファイルのfunctionの読み込み方
-
ホームディレクトリを示すチル...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
JavaScriptでiframeの内容を「...
-
SCRIPT5007: 未定義または NULL...
-
getElementsByNameで要素が取得...
-
JavaScript でキーを送る
-
キーを押している間の時間を計...
-
function の return 値を表示し...
-
クリックすると別の文章を表示する
-
フォーカス移動抑止について
-
ボタンのID名を取得するには?
-
bodyタグのfocus
-
JavaScriptでのEnterキーとAlt+...
-
【js】onsubmit属性が変更できない
-
自動ジャンプでフォームデータ...
-
idHOGEで取得したinnerText(数...
-
htaでVBSのソースを書いたらエ...
-
AjaxでDBから取得したデータを...
-
javascriptで質問があります。
-
GoogleMapのmoveイベントのjava...
-
<body>タグを書き換えたい
-
マウスクリックした地点のテキ...
おすすめ情報
本文にもあるように②で書き換えられては困ります。①と②を同時に反映させるには、どのような書き方にすればよいでしょうか?