- ベストアンサー
jqueryにおいて配列を繰り返す場合
下記のようなコードをひとつにまとめることはできますか?よろしくおねがいします。 $('#prev').hover(function(){ $('body').css('right, '-50px'); }, function(){ $('body').css('right, '0px'); }); $('#next').hover(function(){ $('body').css('left, '-50px'); }, function(){ $('body').css('left, '0px'); });
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
このほうがマシですかね。 ['prev','right','next','left']をループ処理にすることもできますが。 function the_hover(id, prop){ $("#"+id).hover(function(){ $('body').css(prop, '-50px'); },function(){ $('body').css(prop, '0px'); }); } the_hover('prev','right'); the_hover('next','left');
その他の回答 (4)
- fujillin
- ベストアンサー率61% (1594/2576)
別案で… (2種類程度なら直接記述した方がよさそうですが) var data = [ { id:"#prev", param0:{ rignt:-50 }, param1:{ right:0 }}, { id:"#next", param0:{ left:-50 }, param1:{ left:0 }} ]; $.map(data, function(d){ $(d.id).hover( function(){ $('body').css(d.param0); }, function(){ $('body').css(d.param1); } ); });
- hatimiti
- ベストアンサー率68% (26/38)
こんなのとか? 'key'、'val'が冗長ですね。 動作確認はしていません。 $([ {'key':'#prev', 'val':'left'}, {'key':'#next', 'val':'right'}]).each(function(i) { $(this.key).hover(function(){ $('body').css(this.val, '-50px'); }, function(){ $('body').css(this.val, '0px'); }); });
- 神崎 渉瑠(@taloo)
- ベストアンサー率44% (1016/2280)
>No.1 すみません、そこは見逃していました。 この程度しか思いつきませんでした。 過剰な作り込みはかえって難しくなります。 for( var i=0, list=["prev","right","next","left"]; i<list.length; i+=2 ){ $("#"+list[i]).hover.apply($("#"+list[i]), (function the_hover(prop){ return [function(){ $('body').css(prop, '-50px'); }, function(){ $('body').css(prop, '0px'); }]; })(list[i+1]) ); }
お礼
お礼が遅くなり、申し訳ありません。完璧です、ありがとうございました!
- 神崎 渉瑠(@taloo)
- ベストアンサー率44% (1016/2280)
jQueryのセレクタはCSSセレクタに準拠しています。 $('#prev, #next') 以下略
補足
ご回答有難うございます。ただ、この場合、変更するcssがleftとrightで異なるので、変数を使って処理できないかと。
お礼
お礼が遅くなり、申し訳ありません。完璧です、ありがとうございました!