我不确定为什么这在IE7中永远不会完成,但在其他浏览器中也是如此。我在if (i < l)
之后发出警报,它在IE7中触发一次但在此之后不会继续。任何线索?
// i, l, object, array, tr, table all determined up here.
function iterate(i, callback) {
if (i < l) {
tr = buildTableRow(object[array[i]]);
tr.attr({
"id": 'theObjectIs' + array[i]
});
table.append(tr);
i = i + 1;
iterate(i, callback);
} else {
callback();
}
}
iterate(0, function() {
alert("Draw Complete");
});
答案 0 :(得分:0)
通过每次迭代总是更新DOM,这种递归的性能会变得非常糟糕。如果你想更快地减少重绘量。
您想要附加tbody而不是table元素。
答案 1 :(得分:0)
抱歉,在这里看不到递归的任何原因。普通循环应该可以正常工作:
for (var i = 0; i < array.length; i++) {
tr = buildTableRow(object[array[i]]);
tr.attr({
"id": 'theObjectIs' + array[i];
});
table.append(tr);
}
alert("Draw Complete");
对于记录,您可以检查原始代码中的l
的值(警报?),最有可能等于1,这就是函数只执行一次的原因。
编辑:代码可能会在循环/递归内的任何行中出错,从而解释问题。使用此类代码检测此类问题:
if (i < l) {
try {
tr = buildTableRow(object[array[i]]);
tr.attr({
"id": 'theObjectIs' + array[i]
});
table.append(tr);
} catch (ex) {
alert("error occurred at index " + i);
}
i = i + 1;
iterate(i, callback);
} else {
callback();
}