javascript - JavaScript/jQuery 中的嵌套循环不起作用

标签 javascript jquery

我在一个 for 循环中调用一个 for 循环,但它不起作用,这是代码:

function PopulateMonths() {
for (var m = 0; m < 12; m++) {
    var $month = $('.d-month').clone();
    $month.find('.d-header').text(m);
    $month = PopulateDays($month);
    $month.appendTo('#diary').show();
    $month = null;
}
}

function PopulateDays($month) {
for (var d = 0; d < 30; d++) {
    var $row = $('.d-row').clone();
    $row.find('.d-day').text(d);
    $row.appendTo($month).show();
    $row = null;
}
return $month;
}

如果我手动调用 PopulateDays 12 次它工作正常,一旦我尝试使用 PopulateMonths() 循环 12 次页面崩溃,CPU 使用率飙升,所以我假设有很多工作正在进行。

我错过了什么?

最佳答案

我以前不得不解决一个非常相似的问题。这是因为当您克隆元素时,您也在克隆它们的类等。然后将克隆的项目插入到文档中。

下次您尝试查找具有该类的元素时,它将找到两个实例 - 原始实例和您在上一步中克隆的实例。两者都将被再次克隆,现在页面上有 4 个元素。因此,您基本上是在每次迭代中将元素数量加倍,几天内执行 12 次,几个月内执行 30 次。

2^12 = 4096
2^30 = 1,073,741,824

这些只是粗略估计它可以增长到多大。我没有做任何进一步的分析来找到确切的数字,但基本上指数增长正在消耗 CPU 并导致浏览器崩溃。

关于javascript - JavaScript/jQuery 中的嵌套循环不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9832611/

相关文章:

通过 .htaccess 进行 Javascript 压缩?

javascript - JS 显示和隐藏表单

jquery - 我如何使用 jQuery 获取所有表单元素(输入、文本区域和选择)?

javascript - jquery菜单(某些 `<li>`包含内部 `<ul>`标签)

JQuery Fancy Box 文本溢出

javascript - 使用 jquery 将用户滚动到移动设备上单击的选项卡

javascript - 检查数组是否有 AngularJs 中的特定索引

javascript - 带有自定义过滤器的angularjs ng-options不起作用

javascript - 从多个设备同时在多个轨道上录制音频

javascript - 将 cURL 请求转换为 Javascript 时遇到问题