【jQuery】 bodyIDを参照して画像を置換する方法

先ほどまで、どーやればいいのかなーと考え考えやってみたので備忘録のために記事にします。

記事内のソースは好きに流用でもなんでもしてください。

 

やりたいこと

例えばグロナビなどでSSIを使ってて、すべてのページで共通利用している場合に各カテゴリでのstay表示をどーしようかいろいろ試行錯誤してました。

そして、私はけっこうな頻度でbodyにそのカテゴリを示すIDを付けていろいろとやることが多いので、これのbodyIDを使って画像の置換ができれば楽ちんだなーと思いやってみました。ていうか、世の中的にはみなさまとっくにやってることでしょうが、今更やってみたのです。

 

というわけで、

「bodyIDを参照して画像を置換する方法」です。

 

HTML

  • body

<body id="btnA">

ボディに好きなIDを振っておきます。なんでもいいです。仮に「btnA」などと書いてますが、普通にカテゴリ名「company」とかなんでも大丈夫です。

 

  • グロナビ

<ul  class="imgReplace">

<li class="btnA"><a href=""><img src="common/img/btn_A-off.png" alt="ボタンA" width="192" height="100"></a></li>

<li class="btnB"><a href=""><img src="common/img/btn_B-off.png" alt="ボタンB" width="192" height="100"></a></li>

<li class="btnC"><a href=""><img src="common/img/btn_C-off.png" alt="ボタンC" width="192" height="100"></a></li>

<li class="btnD"><a href=""><img src="common/img/btn_D-off.png" alt="ボタンD" width="192" height="100"></a></li>

<li class="btnE"><a href=""><img src="common/img/btn_E-off.png" alt="ボタンE" width="192" height="100"></a></li>

 </ul>

画像を置換したい対象のナビをulで組んで、ulに「imgReplace」とclassを付けます。各liにはclassでbodyに振った各IDを付けていきます。ここでは、仮にbtnA~btnEとしてます。

 

今回は、bodyIDがbtnAの場合に、btnAというclassが付いているliに属するimgを置換していこうと思います。

 

jQuery 

//--- image replace ---------------------------------------------------------------//

var bodyID = $('body').attr('id');

 

$('.imgReplace li').each(function() {

var navClass = $(this).attr('class');

var targetImg = $(this).find('img');

if (navClass == bodyID) {

$(targetImg).attr('src',$(targetImg).attr('src').replace('-off','-on'));

};

});

 

これだけです。

一応、1行ずつ解説してみます。・・・自信ないけど。

 

2行目の「var bodyID = $('body').attr('id');」でそのページのIDを取得します。

4行目からが画像置換の命令になるのですが、「$('.imgReplace li').each(function() { ~ });」は「imgReplaceというclassの中の各liで」という命令です。そのあと、

「var navClass = $(this).attr('class');」でそのliのclass名を取得して、実際に置換したい画像を「var targetImg = $(this).find('img');」で変数に入れておきます。

「if (navClass == bodyID)」でbodyIDとliのclass名を見比べて、同一だった場合に「$(targetImg).attr('src',$(targetImg).attr('src').replace('-off','-on'));」で画像置換をしています。

 

 無駄な記述も多々あると思いますが・・・。IE8~とchromeで動作確認できました。

 

今日からがんばると宣言した日に2回目の投稿!

素晴らしい。明日もがんばろう。

このテンプレートだとソース書いたときに超絶見にくいので違うテンプレートを探そうと思います。

 

本日参考にさせていただいたサイト