1

没有回调函数jsFiddle的那个会产生错误的结果。控制台日志应显示 i=0 & j=0,如“group[0] record[0]”所示。因为我试图找到 dd/dt 集:“书:书名”。

我知道我需要包含一个类似于这篇文章的回调函数。但是我似乎不明白如何正确插入函数。这是我正在研究的一个:

带有回调的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);
    };
  });    
});

你得到的结果是正确的,描述“另一个书名”是在第二组中找到的,而不是在第一组中。

于 2013-02-01T22:23:22.260 回答