1

コールバック関数jsFiddleのないものは、間違った結果を生成します。コンソール ログには、「group[0] record[0]」と示されているように、i=0 & j=0 が表示されます。dd/dt セット「Book: a book name」を見つけようとしているからです。

この投稿のようなコールバック関数を含める必要があることを理解しています。ただし、関数を正しく挿入する方法を理解していないようです。ここに私が取り組んでいるものがあります:

コールバック付きのjsfiddle

var arrDL = [];
$("dl").each(function(i) {     
   arrDL[i] = [];
   $(this).children("dt").each(function(j){ 
       function(n){
            return function(){
                var $this = $(this); 

                arrDL[n][j] = {
                   title: $this.text(),
                   description: $this.next("dd").text()
                };

                if($this.text() == "Book:" && $this.next("dd").text() == "another book name"){
                   console.log("group 0 record 0: " + n + '-' + j);
                };
           };    
      }(n);               
  });    
});

ご協力いただきありがとうございます。

4

1 に答える 1

2

関数内 ( inner のコールバック内each) に関数を作成し、それを返します。外側の関数を実行していますが、実行しない関数参照を返すため、内側の関数内のコードは決して実行されません。

また、変数nを外側の関数に送信していますが、どこにも定義されていないため、そのままになりますundefined

実際には、外部関数も内部関数も必要ありません。次のコールバックにコードを入れるだけですeach

var arrDL = [];
$("dl").each(function(i) {     
  arrDL[i] = [];
  $(this).children("dt").each(function(j){ 
    var $this = $(this);
    arrDL[i][j] = {
      title: $this.text(),
      description: $this.next("dd").text()
    };
    if($this.text() == "Book:" && $this.next("dd").text() == "another book name"){
      console.log("group 0 record 0: " + i + '-' + j);
    };
  });    
});

得られる結果は正しいです。「別の本の名前」という記述は、最初のグループではなく、2 番目のグループにあります。

于 2013-02-01T22:23:22.260 に答える