jQuery - 使用延迟向数组内的元素添加类

时间:2012-08-03 14:26:46

标签: jquery arrays each

我有一个数组,其中包含我页面中的一些元素。

现在我需要一个通过数组识别的函数,并为每个元素添加一个类bold。问题是,一旦添加了类,就必须经过一段时间。然后必须删除bold,并且需要将其应用于下一个元素,从而产生" wave"运动。

我试图这样做:

$.each(tdArr, function(i, v) {
  v.addClass("bold");
  setTimeout(function(){
    v.removeClass("bold");
  }, 900)
})

该代码的问题是bold一次添加到所有元素,并在900 ms后被删除,同样来自所有元素时间。

如何在单独的操作之间添加延迟,我该怎么做?

4 个答案:

答案 0 :(得分:1)

我认为你需要稍微改变一下,因为setTimout会立即返回,它不会阻止下一个元素被设置为粗体。

您可以使用以下方法执行此操作:

function bold(i){
    if(i>0){
        $tdArr.eq(i-1).removeClass('bold');
    }
    if(i == $tdArr.length){
        return;
    }
    $tdArr.eq(i).addClass('bold')   

    setTimeout(function() { bold(i+1) },900);
}

然后打电话给你,你只需要拨打bold(0)

实例:http://jsfiddle.net/rJGjZ/

答案 1 :(得分:0)

试试这个:

$.each(tdArr, function(index, element) {
  var $elem = $(element);
  $elem.addClass("bold");
  setTimeout(function(){
    $elem.removeClass("bold");
  }, 900)
})

第二个参数不是jQuery元素,你需要转换他

答案 2 :(得分:0)

在迭代数组时增加延迟,并确保将元素包装在jQuery中(如果它尚未包装)。如果它是jQuery元素的集合,那么使用each进行迭代。

var delay = 900

$els.each(function(){
  var $this = $(this)
  setTimeout(function(){
    $els.removeClass('bold')
    $this.addClass('bold')
  }, delay+=900)
})

否则,我会使用for并将该元素包装在jQuery中。

for (var i=0, l=arr.length, d, prev; i<l; i++; d+=900) {
  prev = arr[i-1]
  setTimeout(function(){
    if (prev) $(prev).removeClass('bold')
    $(arr[i]).addClass('bold')
  }, d)
}

答案 3 :(得分:0)

这样的事情对你有用吗?

function Bold(element) {
  $(element).addClass("bold"); // we bold the current tdArr
  setTimeout(function(){
    var nextSibling = $(element).next("td") // (if the tdArr are "td" tags) we find the next td brother of this one
    if (!!nextSibling) Bold(nextSibling); // if there is a brother, repeat the function on him after 900ms
  }, 900)
}

Bold(myfirsttd);