JavaScript:class要素のHTMLをreplace。

〽️これが実用的なreplace。




replaceしたい「div」は1箇所とは限らない!

こんにちは。「ふ」です。

前回まではreplaceしたい範囲を<div> 〜 </div>で囲みid名を指定。それに対してJavaScriptを仕込んできました。

HTML・JavaScript

「「1成形したい範囲を
で囲み、idを設定」」
りんご
「「3   ーーーーーーーーーーーーーーー」」 <script> 「「1
内のinnerHTMLを取得」」 var str = document.getElementById("sample").innerHTML; 「「3〜 ここにreplace処理を記述 〜」」 </script>




然し乍らページ内でreplaceさせたい範囲は1箇所ではないことも多々あるはず。

複数の範囲に対して共通でJavaScriptを適用させたいときは、「id」ではなく「class」を指定してあげましょう。

idとclassについて

◼︎「id」はページ内の固有のtagを識別させるセレクタなので、1つのページ(HTMLファイル)内に同じidのtagが存在してはいけません。

◼︎ページ内の複数のtagに対して共通のセレクタを指定したいときは、「class」を使って識別名を添えます。

HTML

りんごA
りんごB

ブラウザ


この「clsample」に対してreplaceメソッドを適用させていきましょう。



replaceしてみましょう。

class要素の取得は、getElementsByClassName( )を使います。

「「1//class要素を取得する」」 var cl = document.getElementsByClassName("clsample");

「getElement〜」ではなく、「getElements〜 (複数形)」であることに注意してください。

innerHTMLも取得してreplaceさせてみましょう。これまでの手順でやってみます。

「「1//divのHTML(文字列)を取得」」 var clstr = cl.innerHTML; 「「1//取得した文字列をreplace (テキストの文字色を赤にするCSSを追加)」」 clstr = clstr.replace(/りんご/g,'りんご'); 「「1//元のHTMLコードをreplaceしたものに置き換える」」 document.getElementsByClassName("clsample").innerHTML = clstr;

では実行してみま・・。

ブラウザ






んんんん!?












なぜだ。

💧原因を調べてみましょう。





型をしらべてみる。

replaceメソッドをちゃんと適用させるには、その対象がString(文字列)でなくてはいけません。
先ほど変数clstrを作ってclのinnerHTMLを代入しましたが、ちゃんとStringが取得できているのか、調べてみます。

「「1//divのHTML(文字列)を取得」」 var clstr = cl.innerHTML; 「「1//出力してみる」」 console.log(clstr);   「「1▼ undefined」」

「undefined」・・見つかりません、となります。String(文字列)が取り出せていないということですね。
これではreplaceを行うことができません。

codeをもう1つ遡って調べてみましょう。

「「1//class要素を取得する」」 var cl = document.getElementsByClassName("clsample"); 「「1出力してみる」」 console.log(cl); 「「1 ▼ HTMLCollection(2) [div.clsample, div.clsample]」」

「HTMLCollection」なるものが出力されました。見たところArray(配列)っぽいが・・



HTMLCollection。

HTMLCollectionとは、HTML要素の集合を表すオブジェクトです。
「配列」とは別物とされていますが、添字をつけて要素を取り出したり、length(要素数)というプロパティを持っていて、配列のように扱うことができます。

試してみましょう。

var cl = document.getElementsByClassName("clsample"); 「「1このHTMLCollectionの要素数をしらべる」」 console.log(cl.length); 「「1 ▶︎ 2」」 「「1添字を使って1つ目の要素を取り出す」」 console.log(cl[0]); 「「1 ▶︎
りんごA
」」

Collection内の要素の数、そして要素の内容を取り出すことができました。
扨(さて)、この1つ目の要素からinnerHTML(文字列)を取り出すことはできるのでしょうか。変数を作って調べてみます。名前はclElementにしました。

var clElement = cl[0].innerHTML; console.log(clElement); 「「1 ▶︎りんごA」」 console.log(clElement); 「「1 ▶︎string」」

文字列を取得することができたようです。



要素の数だけreplaceを繰り返す。

それではHTMLCollectionの全ての要素に対してreplaceを仕込んでいきましょう。
lengthプロパティで要素の数を取得し、for文を使ってinnerHTML取り出し → replaceさせていきます。

var cl = document.getElementsByClassName("clsample"); 「「1//要素の数だけ処理を繰り返す」」 for (i = 0; i < cl.length; i++) { 「「1//HTMLを取り出す」」 var clstr = cl[i].innerHTML; 「「1//replace。 (テキストの文字色を赤にするCSSを追加)」」 clstr = clstr.replace( /りんご/g, 'りんご' ); 「「1//元のHTMLソースをreplaceしたものに置き換える」」 document.getElementsByClassName("clsample")[i].innerHTML = clstr; }

扨、うまくいくかな?プレビューしてみましょう。

ブラウザ

ついに成功

やっと動いてくれましたね〜♪
試行錯誤したのちの成功、うれしい瞬間です。





とても便利なスクリプト。

今回作ってきたものはすごく便利なcodeです。これをHTMLファイルに仕込んでおけば、class属性を指定するだけで好きな箇所にJavaScriptを適用させることができます。
もちろん属性を指定する場所は<div> 〜 </div>に限らず、<p>でも<h1>でもかまいません。

classを指定しながらHTMLコードを書いていきます。

HTML

りんご

本文本文本文本文本文本文本文本文本文本文本文本文 本文本文本文本文本文本文本文本文本文本文本文本文

りんごはふつう赤いよ。

本文本文本文本文本文本文本文本文本文本文本文本文 本文本文本文本文本文本文本文本文本文本文本文本文

りんごについて詳しく知る

青いりんごもあるよ。

ブラウザ

てきとーにコードを書きなぐってみましたが、ちゃんとreplaceされています。
class要素にreplaceメソッドを適用させるのには一苦労でしたけども。自分好みのreplaceを仕込んで、実用的なwebコードエディタを作ってみてください♬







「ふ」です。

swift、web、ガジェットなど。役立つ情報や観ていてたのしいページを書いていきたいと思います。

🐧 twitter 🐧