【day52】jQueryでhoverした時テーブルセルにハイライトをつける

jQuery

プログラミング独学day52の学習で、得たことや気づきを教えて!

今日は

・jQueryでhoverした時にセルにハイライトをつける方法

をアウトプットします!

 

 

 

こんにちは。プログラミングでweb制作ができるようになりたいharuです。

2歳0歳の育児をしながら、22時〜1時に独学しています!

 

→プログラミング学習day52、もりけん塾day8

 

わかったことや、気付きをログに残します。

同じく初学者の人が、これをみてインプットや復習ができるように書いていきます。

 

【jQuery】hoverしたらテーブルセルにハイライト

今日は、「jQuery標準デザイン講座」レッスン18のアウトプットです。

難易度、☆3つになり構成もだいぶ難しく感じるようになってきました。

 

【完成物】

完成物はこちらです。

テーブルセルをhoverすると、ハイライトがつく仕様です。gifファイルにしたら動画みにくいかなw

 

構成を考える

まず、お決まりの構成を考えていきます。

【構成】
①セルにマウスオーバーする
②同行のセルのスタイルを変更
③同列のセルのスタイルを変更
④マウスアウトしたらセルの色を元に戻す

hover() addClass() removeClass() を使うのかな?ってところまでは想像できた。

→できるだけ自分の頭で想像してから、チュートリアル見るようにしてます。

 

【制作】ハイライトをつけよう

まず、htmlの確認から。

<tr>に<th><td>がズラーっと並んでテーブルを構成しています。

 

構成①②:セルにマウスオーバー→同行のスタイル変更

hover()メソッドを使って、中に関数を書いていきます。

.addClass()メソッドで、事前に用意した.targetクラス(セルの背景色を変更)を追加。

 

セレクタの$(this).parentは何を指している?

・this→記述の主語である $(“td”)をさす
・.parent→<td>の親である <tr>をさす
=いわゆる「行」を選択しています

構成③:同列のセルのスタイル変更

次に列のスタイルを変えます。つまずいたのはここです。

*考え方*

①hoverされたのは、行の中で何番目なのか?

→たとえば、赤い枠で囲まれた行の中で、選択されている”2000″は2番目です。

 

これを、コードにしてみる。

myIndexという変数を定義します。
<tr>の中で何番目か?はindex()メソッドで求められます。

 

②それぞれの行の、myIndex番目の背景色を変えます。

→先ほど選択した”2000”はa行のなかで2番目なので、b〜g行の2番目をそれぞれ選択します。

これをコードにしてみる。

 

特定の順番の<td>要素を選択するときは、nth-child擬似クラスを使います。

nth-child擬似クラスとは?
「各要素のn番目に処理をする」メソッドのこと。
→ここでは、<td>のn番目それぞれに処理をするという使われかた

 

そして、わたしのわからなかったポイント。
(“+ myIndex +”)の記述です。

 

なぜ++で囲むのか?
jQueryのセレクタは、「文字列」で書くから。【以下参考リンクより引用】
(myIndexが0の場合) 文字列td:nth-child( + myIndex + 文字列) でtd:nth-child(0)という文字列を得ています。

 

→ドンピシャなteratail記事があったので貼っておきます。

 

③index()メソッドとnth-child()メソッドのカウントの違いを調整

index()メソッド:0からカウント
nth-child()メソッド:1からカウント

 

このようなカウントの違いを調整するために、定義した変数の値に+1をします。

これは、①のmyIndexの定義の後に書いておきます。

 

構成④:マウスアウトしたらセルの色を元に戻す

removeClass()メソッドで.targetクラスを外します。

 

これで完成です。

あとがき

nth-childという擬似クラス、セレクタは文字列、という点が勉強になった。

*今日の工夫*

・解決の際、ググっても全然出てこなかったので「teratail」で記事を探した

・完成版の動画でgifを使って見た

 

今日は以上です。

 

Thanks:師匠「もりけんさん」(@terrace_tec)

もりけんさんのHPはこちら