具有settimeout和for循环的延迟+另外1个延迟

时间:2018-11-21 13:35:11

标签: javascript nested click settimeout delay

在我之前的问题中,我有一些延迟问题。上一个问题: delay with settimeout and for loop

我的目的是从网站上获取一些数据,然后在IE中使用控制台。 当用户单击标记名称为“ something”的元素时,内容将更改。

如果我只想通过以下方式单击元素,则此代码可以完美运行:

for (var x = 1; x < 5; x++) {
    (function(i) {
        setTimeout(function() {
    document.getElementsByTagName("something")[i].click();    }, i * 1000)
  }(x))
}

但是在我的情况下,单击后我还需要从网站上获取内容,因此单击后添加了新行:

myarray=[];
        for (var x = 1; x < 5; x++) {
            (function(i) {
                setTimeout(function() {
            document.getElementsByTagName("something")[i].click();
    var x=theelement.innerHTML;
    myarray.push(x);
    }, i * 1000)
          }(x))
        }

因此,使用数组我可以在单击后获取内容。问题在于,单击该网站后,加载的时间约为1-2秒,而我的上述代码立即尝试即可获取该元素并将其innerHTML值分配给x变量。

我尝试在延迟内进行“嵌套延迟”,但没有用,因为它们分开评估。所以我试图像这样解决问题:

outer settime with delay 1000ms
   element.click()
      inner settime with delay 3000ms
          x=element.innerhtml
      innersettime close tag
outer settime close tag

在这种情况下,内部设置时间和外部设置时间分别计算,而不像其他语言中那样众所周知的sleep()函数。目的是在“单击”和“获取元素的内容”功能之间进行延迟。并且这2个功能必须重复30次。在这30次之间也必须延迟。

link1.click();
3sec pause;   -->this is the pause between "click" and "get content"
x=elem1.innerHTML;
myarray.push(x);
1sec pause;
link2.click();
3secpause;  --> this is the pause between each loop (there is 30link on the site)
x=elem2.innerHTML;
myarray.push(x);
until link30.click()....

网址不变,只有内容。

0 个答案:

没有答案