以下のように連番数字が付いた、同じ挙動の関数を
ひとつにまとめて書く書き方があれば教えてください。
宜しくお願い致します。
mapAirStr0='mapWorld0';
function Map_Show0(mapAirJsStr0){
if(document.getElementById(mapAirStr0)){document.getElementById(mapAirStr0).style.display='none';}
if(document.getElementById(mapAirJsStr0).style.display=='none'){
$("#"+mapAirJsStr0).animate({opacity:"toggle"},"slow");
mapAirStr0=mapAirJsStr0;
}
};
mapAirStr1='mapWorld1';
function Map_Show1(mapAirJsStr1){
if(document.getElementById(mapAirStr1)){document.getElementById(mapAirStr1).style.display='none';}
if(document.getElementById(mapAirJsStr1).style.display=='none'){
$("#"+mapAirJsStr1).animate({opacity:"toggle"},"slow");
mapAirStr1=mapAirJsStr1;
}
};
mapAirStr2='mapWorld2';
function Map_Show2(mapAirJsStr2){
if(document.getElementById(mapAirStr2)){document.getElementById(mapAirStr2).style.display='none';}
if(document.getElementById(mapAirJsStr2).style.display=='none'){
$("#"+mapAirJsStr2).animate({opacity:"toggle"},"slow");
mapAirStr2=mapAirJsStr2;
}
};
連番変数を配列に置き換えてやればよいと思われます。
mapAirStr = ['mapWorld0','mapWorld1','mapWorld2']; function Map_Show(idx, mapAirJsStr){ if(document.getElementById(mapAirStr[idx])){document.getElementById(mapAirStr[idx]).style.display='none';} if(document.getElementById(mapAirJsStr).style.display=='none'){ $("#"+mapAirJsStr).animate({opacity:"toggle"},"slow"); mapAirStr[idx]=mapAirJsStr; } };
より「javascriptらしい」書き方だと、以下のような感じですかね。
クロージャを利用して、グローバル変数だった変数を各関数からのみ見えるように変更してあります。
Map_Show0 = createMapShowFunc('mapWorld0'); Map_Show1 = createMapShowFunc('mapWorld1'); Map_Show2 = createMapShowFunc('mapWorld2'); function createMapShowFunc(initMapAirStr) { var mapAirStr=initMapAirStr; return function(mapAirJsStr) { if(document.getElementById(mapAirStr)){document.getElementById(mapAirStr).style.display='none';} if(document.getElementById(mapAirJsStr).style.display=='none'){ $("#"+mapAirJsStr).animate({opacity:"toggle"},"slow"); mapAirStr=mapAirJsStr; } }; }
単体で動く版。
でも、そんな複雑にしなくてもこれでいい気がする。
2012/07/31 12:10:38まとめられました!ありがとうございます!
2012/07/31 15:50:06勉強になるように書いていただいて、ほんとうにありがとうございました!!