没有回调函数jsFiddle的那个会产生错误的结果。控制台日志应显示i = 0& j = 0,如“group [0] record [0]”所示。因为我试图找到dd / dt集:“书:书名”。
我知道我需要包含类似于this post的回调函数。但是我似乎不明白如何正确插入函数。这是我正在研究的那个:
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);
});
});
感谢您的帮助。
答案 0 :(得分:2)
您正在函数内部创建一个函数(在内部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);
};
});
});
您得到的结果是正确的,在第二组中找到“另一本书名称”的描述,而不是第一组。