- ベストアンサー
画像を使用したタブを複数設置
- jQueryを使用してタブ切り替え式の画像タブを複数設置する方法について
- 使用するスクリプトを3つに複製し、タブの要素やクラスを変更することで同じファイル内に複数の画像タブを設置することができます
- さらにスマートな実装方法があるかどうかを教えていただきたい
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
回答がないみたいなので… >これをもっとスマートなscriptにする方法があればご教授頂けないでしょうか スマートかどうかはわかりませんが、基本的には共通した処理なので、対象を指定すればその対象に対してタブの処理を設定するようにしてあげればよいのではないでしょうか? 記述方法としては、直接に要素を指定する方法ではなく、その対象要素やイベント発生要素から相対的に要素等を指定する方法になるでしょう。 オリジナルがid利用なので共通のCSSを利用しにくい点などはありますが、とりあえずソースやCSSはそのままとして、こんな考え方ではいかがでしょうか? (サンプルなので、チェックは省略。細かいところは多少いい加減です) ・全角空白は半角に var tab_set = function(str){ //複数指定の場合の処理 var i, id, ids = str.split(","); for(i=0; id=ids[i++];){ var div = $("#" + id); if(div.length) init(div); } // *** 初期処理+タブ機能設定 *** function init(div){ $("ul.btn_tab li a", div).focus(function(){ $(this).blur(); }).hover( //ロールオーバー設定 function(){ set_image(this); }, function(){ set_image(this, 1); } ).click(function(){ //クリック時の処理設定 var t = $(this); if(t.hasClass("selected")) return false; var list = t.parent().siblings("li"); var sel = set_image($("a.selected", list).removeClass("selected"), 2); if(sel) $(sel.attr("href")).fadeOut(500, function(){ $(set_image(t.addClass("selected")).attr("href")).fadeIn(500); }); return false; }).each(function(){ //初期表示状態 var f = $(this).hasClass("selected")?0:2; set_image(this, f); if(f) $($(this).attr("href")).hide(); }); } //画像url処理(_onの付加・削除) function set_image(e, f){ var el = $(e), img = $("img", e), src = img.attr("src"); if(!src || (f==1 && el.hasClass("selected"))) return; src = src.replace(/^(.+)_on(\.[a-z]+)$/,"$1$2"); if(!f) src = src.replace(/^(.+)(\.[a-z]+)$/, "$1_on$2"); img.attr("src", src); return el; } }; // *** タブの設定サンプル *** //(idを引数で指定。カンマ区切りorそれぞれに) $(function(){ tab_set("wrapper1,wrapper2"); tab_set("wrapper3"); });
お礼
ご回答ありがとうございます!! お教え頂いた方法でなんとか思っていたようにできそうです。 感謝いたします! 本当にありがとうございました!