• 締切済み

JavaScriptの繰り返しを簡略化したい

下記のJavaScriptを簡略化したいと考えています。 $(document).ready(function(){  $("#A").jPlayer({   ready: function () {    $(this).jPlayer("setMedia", {     mp3:"documents/alfa/A.mp3"    });   },   swfPath: "js",   supplied: "mp3",   cssSelectorAncestor: "#A",   wmode: "window"  });  $("#B").jPlayer({   ready: function () {    $(this).jPlayer("setMedia", {     mp3:"documents/alfa/B.mp3"    });   },   swfPath: "js",   supplied: "mp3",   cssSelectorAncestor: "#B",   wmode: "window"  });  $("#C").jPlayer({   ready: function () {    $(this).jPlayer("setMedia", {     mp3:"documents/alfa/C.mp3"    });   },   swfPath: "js",   supplied: "mp3",   cssSelectorAncestor: "#C",   wmode: "window"  }); }); 3回繰り返していますが、違いは一部分だけです。 #A、A.mp3、#A #B、B.mp3、#B #C、C.mp3、#C どのように記述したら簡略化できるのでしょうか。 よろしくお願いします。

みんなの回答

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.2

#1です。 まったくわかりませんが、補足からどうやらjQueryベースらしいことだけはわかったので… こんなのでは? (全角空白は半角に変換のこと) $.each(["A","B","C"],function(){  $("#"+this).jPlayer({   ready: (function(id){    return function(){     $(this).jPlayer("setMedia", {      mp3:"documents/alfa/" + id + ".mp3"     });    };   })(this),  swfPath: "js",  supplied: "mp3",  cssSelectorAncestor: "#"+this,  wmode: "window"  }); });

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.1

何のライブラリなのかわかりませんが… もしも $.each(["#A","#B","#C"], function(){  alert(this); }); のようなメソッドが使えるなら、関数内に一度記述することで処理可能ではないでしょうか。

Java-Java
質問者

補足

jPlayerというのをいじっています。 http://www.jplayer.org/ 色々いじってみて多次元配列というのを利用してみました。 var sounds = [  ['#A','A.mp3','#A2'],  ['#B','B.mp3','#B2'],  ['#C','C.mp3','#C2'] ]; $(document).ready(function(){  for (var i = 0; i < sounds.length; i++){   $(sounds[i][0]).jPlayer({    ready: function () {     $(this).jPlayer("setMedia", {      mp3: sounds[i][1]     });    },    swfPath: "js",    supplied: "mp3",    cssSelectorAncestor: sounds[i][2],    wmode: "window"   });  } }); うまくいくかと思っていたのですが、 「mp3: sounds[i][1]」の部分だけが展開してくれず、そのまま文字列が表示されてしまいうまくいきません。もしわかるようでしたらご教授下さい。 よろしくお願いします。

関連するQ&A