Quantcast
Channel: CSSタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 8681

【JavaScript】HTML要素内の1文字ごとにスタイルを適用(タグを挿入)する方法

$
0
0

一文字ごとにスタイルを適用させたい

例えば以下のようなものを作りたいとします。
google.png
ここで最も簡単なのは、下記のように一文字ずつ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');

挙動としては、Stringfor...ofでループさせると一文字ずつ処理が行えるので、第ニ引数で指定した要素にinnerHTMLを用いてその文字ごとにspanタグを挿入しています。

念のため<p id="insert"></p>の中身をデベロッパーツールで確認してみます。
tag1.png
問題なく動作していました。

動作デモ → https://jsfiddle.net/hm469fwg/

タグ毎にclassを付けたい場合

今度はforEachを使い、分かりやすくclassindexを使用し番号が1から始まるようにしました。

JavaScript
constinsertTag=(word,target)=>{[...word].forEach((character,index)=>{document.querySelector(target).innerHTML+=`<span class="item${++index}">${character}</span>`})}insertTag('Google','#insert');

こちらの挙動は、第一引数のwordをスプレッド演算子を用いて配列化しています。
[...word]の中身を確認してみると、以下のようになっています。
array.png
そしてこれに対してforEachでループして一文字ごとにspanタグを挿入しています。
前者もforEachで行っても良かったのですが、タグ付けするだけで良い場合はfor...ofの方がコードが簡潔に書けるのでそちらを採用しました。

こちらも念の為<p id="insert"></p>の中身を確認してみます。
tag2.png
問題なく動作していました。(*゚▽゚ノノ゙☆パチパチパチ

動作デモ → https://jsfiddle.net/jpueq2xm/


Viewing all articles
Browse latest Browse all 8681

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>