一文字ごとにスタイルを適用させたい
例えば以下のようなものを作りたいとします。
ここで最も簡単なのは、下記のように一文字ずつspanタグ
で囲んでスタイリングする事だと思います。
HTML
<p><span>G</span><span>o</span><span>o</span><span>g</span><span>l</span><span>e</span></p>
ただ、これだと一々面倒ですし、単語の長さや使用頻度によっては見通しの悪いコードになってしまいます。
そこでJavaScript
を使って、出来るだけ新しく且つ直感的に分かり易いコードで関数に纏めて、使い回せるようにしていきたいと思います。
私なりの最も分かり易いやり方
以下のようになりました。
HTML
<pid="insert"></p>
JavaScript
constinsertTag=(word,target)=>{for(constcharacterofword){document.querySelector(target).innerHTML+=`<span>${character}</span>`;}}insertTag('Google','#insert');
挙動としては、String
をfor...of
でループさせると一文字ずつ処理が行えるので、第ニ引数で指定した要素にinnerHTML
を用いてその文字ごとにspanタグ
を挿入しています。
念のため<p id="insert"></p>
の中身をデベロッパーツールで確認してみます。
問題なく動作していました。
動作デモ → https://jsfiddle.net/hm469fwg/
タグ毎にclass
を付けたい場合
今度はforEach
を使い、分かりやすくclass
にindex
を使用し番号が1から始まるようにしました。
JavaScript
constinsertTag=(word,target)=>{[...word].forEach((character,index)=>{document.querySelector(target).innerHTML+=`<span class="item${++index}">${character}</span>`})}insertTag('Google','#insert');
こちらの挙動は、第一引数のword
をスプレッド演算子を用いて配列化しています。[...word]
の中身を確認してみると、以下のようになっています。
そしてこれに対してforEach
でループして一文字ごとにspanタグ
を挿入しています。
前者もforEach
で行っても良かったのですが、タグ付けするだけで良い場合はfor...of
の方がコードが簡潔に書けるのでそちらを採用しました。
こちらも念の為<p id="insert"></p>
の中身を確認してみます。
問題なく動作していました。(*゚▽゚ノノ゙☆パチパチパチ