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