1

私は、YouTube ビデオのビュー数を数千単位でフォーマットするグリースモンキー スクリプトに取り組んでいます。おおよその数値をフォーマットする私の機能はうまくいっています。私の問題は、匿名関数を介してフォーマットされた数値を元に戻すことです。これが私が試していることです...

function main(arg){
  var viewCount = new Array();

  for(var i=0; i < arguments.length; i++){
      var viewCount = Format(document.getElementsByClassName(arguments[i])[i].textContent);
//  (function(){document.getElementsByClassName(arguments[i])[i].innerHTML = viewCount[i]})();          
  }
}

さて、ここで厄介なことがあります。Firebug でデバッグすると、無名関数のコメントを削除すると、var viewCount でさえ「ReferenceError: 未定義のプロパティ引数 [i] への参照」というエラーが発生します。しかし、コメントが返されると、期待どおりに設定されます。

ここに私が行った完全なテストベッドがあります: http://pastebin.com/JRPRQnv6

4

1 に答える 1

2

arguments [MDN]は、各関数の特別な変数です。匿名関数に引数を渡していないため、空のオブジェクトです。

外部関数からオブジェクトにアクセスする場合は、そのargumentsオブジェクトへの参照を保存する必要があります。

例:

 function main(arg){
  var viewCount = new Array();
  var args = arguments;

  for(var i=0; i < arguments.length; i++){
      var viewCount = Format(document.getElementsByClassName(arguments[i])[i].textContent);
      (function(){
          document.getElementsByClassName(args[i])[i].innerHTML = viewCount[i];
      })();          
  }
 }

しかし、ここで即時関数を使用する理由はまったくわかりません。もう1つの潜在的な問題は、のith要素にアクセスしていることです.getElementsByClassName。ここで、iは引数のループインデックスです。.getElementsByClassNameそれほど多くの要素を返さない場合もあります(つまり、間違ったリストに間違ったインデックスを使用しています)。

多分あなたはするつもりでした:

for(var i=0; i < arguments.length; i++){
    var elements = document.getElementsByClassName(arguments[i]);
    for (var j = 0, l = elements.length; j < l; j++) {
        elements[j].innerHTML = Format(elements[j].textContent);
    }
}
于 2013-01-12T13:49:10.453 に答える