Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/421.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在函数结束前更改文档_Javascript - Fatal编程技术网

Javascript 在函数结束前更改文档

Javascript 在函数结束前更改文档,javascript,Javascript,有没有办法在Javascript函数结束之前修改和更新文档?例如,不是我实际在做什么,而是离得足够近: function longloop(){ for(var i=0;i<100;i++){ x = someLengthyFunction(); document.getElementById('aTable').innerHTML+='<tr><td>' + x + '</td></tr>';

有没有办法在Javascript函数结束之前修改和更新文档?例如,不是我实际在做什么,而是离得足够近:

function longloop(){
    for(var i=0;i<100;i++){
        x = someLengthyFunction();
        document.getElementById('aTable').innerHTML+='<tr><td>' + x + '</td></tr>';
    }
}

这个函数通过按下按钮来调用,我想随着循环的进行更新一个表。我在上面的内容只会在循环完成后显示更新的表。

这绝对是我的工作。您可以作为工作程序运行上述脚本,该工作程序将每隔一段时间传递消息以更新您的内容。但是,由于只有非常现代的浏览器才能利用web workers,而且JavaScript不是一种线程语言,因此您可能必须非常有创造性地编写该循环才能实现这一点。

这绝对是一项非常重要的工作。您可以作为工作程序运行上述脚本,该工作程序将每隔一段时间传递消息以更新您的内容。但是,由于只有非常现代的浏览器才能利用web workers,而且JavaScript不是一种线程语言,因此您可能必须非常有创造性地编写该循环才能实现这一点。

不,这是不可能的

您需要做的是将循环分成几个部分,并在更新文档后使用window.setTimeout继续下一部分

例如:

function longloop(){
  function work(i) {
    x = someLengthyFunction();
    document.getElementById('aTable').innerHTML+='<tr><td>' + x + '</td></tr>';
    i++;
    if (i < 100) window.setTimeout(function(){ work(i); }, 0);
  }
  work(0);
}

不,那是不可能的

您需要做的是将循环分成几个部分,并在更新文档后使用window.setTimeout继续下一部分

例如:

function longloop(){
  function work(i) {
    x = someLengthyFunction();
    document.getElementById('aTable').innerHTML+='<tr><td>' + x + '</td></tr>';
    i++;
    if (i < 100) window.setTimeout(function(){ work(i); }, 0);
  }
  work(0);
}

不需要IE,这只是一个辅助项目。好吧,那就注意另一件事。通过在循环中执行.innerHTML+=“…”,您在每次迭代中所做的就是获取表内容的HTML字符串表示,向其中添加一行,然后基于新字符串覆盖所有内容。因此,基本上在每次迭代中,您都会销毁之前创建的所有元素,并重新创建所有元素,再加上一行。这是非常昂贵的。仅供参考小野需要IE,这只是一个辅助项目。好吧,那就注意另一件事。通过在循环中执行.innerHTML+=“…”,您在每次迭代中所做的就是获取表内容的HTML字符串表示,向其中添加一行,然后基于新字符串覆盖所有内容。因此,基本上在每次迭代中,您都会销毁之前创建的所有元素,并重新创建所有元素,再加上一行。这是非常昂贵的。仅供参考o