javascript在迭代内运行延迟函数

时间:2015-03-19 16:32:45

标签: javascript dom jscript

我想找到带延迟的javascript元素。在第一步,我做了这个,它的工作原理。

function mytag() {
  var elements = document.getElementsByTagName('div');

  for (var i=0, im=elements.length; im>i; i++) {
    if (elements[i].className ==='hi'){

        alert('found');

    }}
  }

在第二步中,我对代码进行了一些更改,以便在迭代之间放置延迟。我跟着this link但是无法使它工作。怎么了?

function mytag() {
  var elements = document.getElementsByTagName('div'); 

  for (var i=0, im=elements.length; im>i; i++) {
   (function(i){
      setTimeout(function(){
        if (elements[i].className ==='hi'){
          alert('found!');
        }
      }, 3000 * i);
    }(i));
  }
}

2 个答案:

答案 0 :(得分:2)

以下是如何在查找函数中添加异步的示例:

function findElements() {
  var elements = document.getElementsByTagName('div'); 
  var index = 0;

  var findNext = function() {
    var element = elements[index];
    index++;

    if (element.className === 'hi'){
      // Item found
      console.log('found:'+element);
    }

    if (index < elements.length) {
      setTimeout(findNext, 100);
    }
  };

  findNext();
}

findElements();

http://jsbin.com/zeseguribo/1/edit?html,js,console

答案 1 :(得分:1)

function sleep(milliseconds) {
    var start = new Date().getTime();
    while (1) {
        if ((new Date().getTime() - start) > milliseconds) {
            break;
        }
    }
} // sleep end

然后在你的循环中调用sleep(3000)

编辑:这是阻止延迟的方式。对于异步,非阻塞延迟,您可以使用递归函数。