jQueryを使ってみよう その2

前回はjQueryのDOMオブジェクトの参照について中途半端にエントリーしましたが、続きを書く前に、実践的な使用例をご紹介してみようと思います。これは自社サイトのリニューアルの際に、SEOキーワードのテキストを、クライアント側で動的に画像として表示させるという仕組みを、jQueryで実装したものです。

phpみたく画像をサーバサイドでダイナミックに生成するのではないのでご注意を。画像は予め用意しておきます。どういうことかと言いますと、例えば、

<h1 class="replace" id="hoge-100-50-jpg">Flash CS3</h1>

と書くと、

<h1 class="replace" id="hoge-100-50-jpg">
	<img src="/images/hoge.jpg" width="100" height="50" alt="Flash CS3" />
</h1>

のように変換されます。

ソースはこんな感じです。

window.onload = function(){
	replaceTxtWithImg();
}

function replaceTxtWithImg(){
	var obj = $('.replace');
	if (obj.length == 0) return;
	$(obj).each(function(i){
		var id = $(this).attr('id');
		var arr = id.split("-");
		var len = arr.length;
		var extension = "." + arr[len - 1];
		var imgName = "";
		for (var i=0; i<len-3; i++){
			imgName += arr[i] + "-";
		}
		imgName = imgName.substr(0, imgName.length - 1);
		var img = '<img src="/images/' + imgName + extension + 
			'" width="' + arr[len - 3] + '" height="' + arr[len - 2] + 
			'" alt="' + $(this).html() + '" />';
		$(this).empty().prepend(img);
	});
}

このようにすると、replaceというクラス名の要素は全て、ダイナミックに画像に変換されるようになります。その際idには[画像名][width][height][拡張子]を-(ハイフン)でつなげたものを記述してください。(画像名にハイフンが入っていても大丈夫です。)

初期関数として呼び出すときは、本当は以下のような書き方のほうがベターなのですが、今回のサンプルでは、どうもWin IE6でページをリロードした際に、変換処理がうまくされない(関数がトリガーされてない?)っぽいので、普通にwindow.onloadから呼び出しています。

$(function(){
	replaceTxtWithImg();
});

要素内のテキストは画像のalt属性に入るようになっています。Google等のスパイダーが見るhtmlはjs変換前のものだと思うので、SEO的には有利なのではないかと思います。が、シンプルなテキストが、画像のaltよりもSEO的にウェイトが高いかどうかは微妙なところなので、試される方は自己責任でお願いしますー。

また、この例ではimagesフォルダをルート参照するようにしているので、適宜ディレクトリ名やパスを書き換えてお使いください。

[2007/07/26追記]
画像のalt属性を

$(this).html()

で取得していましたが、

$(this).text()

で取得したほうがマッチベターでした。ごめんなさい。